STM32的RCC配置流程

发布者:快乐旅人最新更新时间:2016-06-02 来源: eefocus关键字:STM32  RCC  配置流程 手机看文章 扫描二维码
随时随地手机看文章
STM32的RCC配置流程
 
 
在STM32中有5个时钟源:
①、HSI是高速内部时钟,RC震荡器,频率为 8MHz。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HIS/2、HSE或HSE/2。倍频可选择为2~16倍,但其输出频率最大不得超过72MHz。
系统时钟SYSCLK,它是供STM32中绝大部分器件工作的时钟源,系统时钟可选择为PLL输出、HSI或者HSE。系统时钟的做大频率为72MHz,它通过AHB分频器分频后送给个模块使用,AHB分频器可选择1、2、4、8、16、32、64、128、256、512分频。AHB分频器输出的时钟送给5大模块使用:
1.       送给AHB总线、内核、内存和DMA使用的HCLK时钟。
2.       通过8分频后送给Cortex的系统定时器时钟。
3.       直接送给Cortex的空闲运行时钟PCLK。
4.       送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用。
5.       送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。
连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。
连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口、第二功能IO口。
 

本次学习使用标准固件库3.3.0

void RCC_Configuration(void) 

  ErrorStatus HSEStartUpStatus; 
  //SystemInit();                                                    //完全可以使用此函数配置,但是为了学习先不用 
RCC_DeInit();                                                      //复位RCC模块的寄存器,复位成缺省值 
        RCC_HSEConfig(RCC_HSE_ON);                    //开启HSE时钟,用HSE的时钟作为PLL的时钟源 
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //获取HSE启动状态
if(HSEStartUpStatus == SUCCESS)                      //如果HSE启动成功         

FLASH_PrefetchBufferCmd(ENABLE);          //开启FLASH的预取功能                   
FLASH_SetLatency(FLASH_Latency_2);      //FLASH延迟2个周期    
RCC_HCLKConfig(RCC_SYSCLK_Div1);        //配置HCLK,PCLK2,PCLK1,PLL 
RCC_PCLK2Config(RCC_HCLK_Div1); 
RCC_PCLK1Config(RCC_HCLK_Div2); 
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); 
RCC_PLLCmd(ENABLE);                              //启动PLL       
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET) 

}//等待PLL启动完成 
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //配置系统时钟 
while(RCC_GetSYSCLKSource() !=0x80)           

}//检查是否将HSE 9倍频后作为系统时钟 
      } 


设置时钟流程:  1.将RCC寄存器重新设置为默认值         RCC_DeInit  2.打开外部高速时钟晶振HSE              RCC_HSEConfig(RCC_HSE_ON);  3.等待外部高速时钟晶振工作             HSEStartUpStatus = RCC_WaitForHSEStartUp();  4.设置AHB时钟                          RCC_HCLKConfig; 5.设置高速APB2时钟                     RCC_PCLK2Config;  6.设置低速速APB1时钟                   RCC_PCLK1Config  7.设置PLL                              RCC_PLLConfig  8.打开PLL                              RCC_PLLCmd(ENABLE);  9.等待PLL工作  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)   10.设置系统时钟                        RCC_SYSCLKConfig  11.判断是否PLL是系统时钟               while(RCC_GetSYSCLKSource() != 0x08)  12.打开要使用的外设时钟                RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd() 
至此我们就将STM32的系统时钟配置好了,系统时钟72MHz,APH 72MHz,APB2 72MHz,APB1 32MHz,USB 48MHz 
其他至于ADC什么的先用不管,用到时再设置,本次只是大体先熟悉下STM32的时钟配置流程,便于以后程序的编写
 
关键字:STM32  RCC  配置流程 引用地址:STM32的RCC配置流程

上一篇:STM32 IO口双向问题
下一篇:STM32 RCC基本原理和配置流程

推荐阅读最新更新时间:2024-03-16 14:55

STM32如何收发float类型数据?
在之前文章里提到了共用体用来传输浮点数的用法,但那篇笔记中没有详细介绍,这篇笔记我们一起来看一看具体实例。 实际应用中,我们可能需要两个设备通过串口传输浮点数据: 本篇笔记为了方便演示,使用串口助手模拟其中一个设备,本篇笔记内容如下: 我们创建一个用于管理float类型数据的共用体: unionfloat_data { floatf_data; uint8_tbyte ; }; 数据的流向如: 本次使用串口助手模拟发送设备,省略了第一步,主要看第②、③步。 创建两个共用体变量,用于发送与接收: unionfloat_datarx_float_data,tx_float_data; 收发相关代码: 左
[单片机]
<font color='red'>STM32</font>如何收发float类型数据?
STM32实验2:IO输入
端口初始化 #include stm32f10x.h //PA15void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能外设置时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //PA15上拉输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); }1234567891011
[单片机]
stm32 io模拟spi通信
首先借鉴他人的编写程序: #define MOSI_H GPIO_SetBits(GPIOB, GPIO_Pin_10) #define MOSI_L GPIO_ResetBits(GPIOB, GPIO_Pin_10) #define SCLK_H GPIO_SetBits(GPIOB, GPIO_Pin_13) #define SCLK_L GPIO_ResetBits(GPIOB, GPIO_Pin_13) #define MISO GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) unsigned char SPI_SendByte(unsigned char dt)
[单片机]
基于STM32的超声波HC-SR04历程
HC-SR04基本工作原理: (1)采用IO口TRIG触发测距,给最少10us的高电平信呈。 (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回, 通过IO口ECHO输出一个高电平, 高电平持续的时间就是超声波从发射到返回的时间。 测试距离=(高电平时间*声速(340M/S))/2。 程序编写思路是:1、配置好使用到的GPIO以及定时器; 2、给模块TRIG端口发送大于10us的高电平信号,当收、收到ECHO回响信号是,打开定时器开始定时; 3、当回响信号消失,关闭定时器; 4、通过定时器定时时间来确定距离。 /*Systick延时函数 Systick 延时初始化*/ void SysTi
[单片机]
STM32的复用时钟的开启和重映射功能
1、IO口的复用 最近在学习STM32,在BZ上一篇关于的串口通信文章里有这么一段代码: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO,ENABLE); 当初是参考开发的例子写的,一直对GPIOD或上“RCC_APB2Periph_AFIO”这句话的意思没搞懂,通过这几天在网上查找资料和看手册,终于高清楚了,不敢独享,希望能对跟我一样的新手有所帮助吧o(∩_∩)o… STM32上有很多I/O口,也有很多的内置外设,像I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是S
[单片机]
STM32库函数开发使用总结
一、外设常具备的几类寄存器 控制寄存器xxx_CR (Control/Configuration Register): 用来配置、控制响应外设的工作方式,如GPIOx_CRL、AFIO_EXTICR1~AFIO_EXTICR4。 数据寄存器xxx_DR (Data Register) : 存储量外设进行输入输出的数据,如GPIOx_IDR、GPIOx_ODR、USART_DR等。 状态寄存器xxx_SR(Status Register): 实时的更新存储着外设的当前运行状态,主要是一些标志位,如USART_SR、ADC_SR等。 二、控制外设的常见操作 设置工作模式、使能外设等  常在初始化外设时完成,调用函数xxx_I
[单片机]
STM32是如何进入中断函数的
中断相信很多人都知道是什么意思,不同的任务有不同的优先级,高任务优先级会比低优先级先执行。在嵌入式系统中, 任务的调度和切换都是根据优先级来判断的。 中断可以分为软中断和硬中断。一开始接触到的一般都是软中断,软中断就是中断程序包含在主程序里面,当中断条件满足时,直接跳转到中断函数执行,然后再返回。就相当于判断语句。 刚开始接触STM32的小伙伴可能会发现main.c里面没有中断程序也没用跳转判断语句。例如:定时器中断 #include system.h #include SysTick.h #include led.h #include time.h int main() { u8 i; SysTic
[单片机]
STM32 ADC模拟看门狗过程实现
我们在做ADC应用时,有些场合需要精确测量出待测信号的数据,有时可能并不关心ADC结果多准确,只要满足某个范围即可,这时我们就可以考虑使用STM32ADC看门狗功能了。 STM32 ADC基本上都支持模拟看门狗功能,即ADC模块对被检测的模拟通道的转换结果基于硬件对其合法性、安全性进行监测。我们可以设置被监测通道的转换结果合法性检查的上下阈值,若结果处于阈值之外则视为异常,并可以触发中断。 尤其有些场合,我们可能使用到数个ADC通道,8个、10个甚至更多,同时程序还需要基于各通道的转换结果进行合法性或安全性监测,此时使用ADC模拟看门狗功能就很方便。我们可以先让模拟看门狗做第一步把关,只有出现异常数据时才去进一步检查确认。
[单片机]
<font color='red'>STM32</font> ADC模拟看门狗过程实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved