1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
2. 系统时钟SYSCLK可来源于三个时钟源:
①、HSI振荡器时钟
②、HSE振荡器时钟
③、PLL时钟
3.STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。
4.任何一个外设在使用之前,必须首先使能其相应的时钟。
相关配置函数:
1.时钟使能配置:
RCC_LSEConfig() 、RCC_HSEConfig()、
RCC_HSICmd() 、 RCC_LSICmd() 、 RCC_PLLCmd() ……
2.时钟源相关配置:
RCC_PLLConfig ()、 RCC_SYSCLKConfig() 、 RCC_RTCCLKConfig() …
3.分频系数选择配置:
RCC_HCLKConfig() 、 RCC_PCLK1Config() 、 RCC_PCLK2Config()…
4.外设时钟使能:
RCC_APB1PeriphClockCmd(): //APB1线上外设时钟使能
RCC_APB2PeriphClockCmd(); //APB2线上外设时钟使能
RCC_AHBPeriphClockCmd(); //AHB线上外设时钟使能
5. 其他外设时钟配置:
RCC_ADCCLKConfig (); RCC_RTCCLKConfig();
6.状态参数获取参数:
RCC_GetClocksFreq();
RCC_GetSYSCLKSource();
RCC_GetFlagStatus()
7. RCC中断相关函数 :
RCC_ITConfig() 、 RCC_GetITStatus() 、 RCC_ClearITPendingBit()…
配置详细步骤:
①时钟管理重置 RCC_DeInit();
②使能所需的时钟源,如HSI,LSI,HSE,LSE,等待起振
③配置各预分频(图中右边的)
④FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //必不可少的步骤,可以参考stm32f10x.c中的System_Init()
⑤配置图中菱形选项。如,使能PLL,不管使能什么都要等待起振。
⑥设置SYSCLK.
如:
RCC_DeInit(); //时钟管理重置RCC_HSEConfig(RCC_HSE_ON); //打开外部晶振
while ( RCC_WaitForHSEStartUp() != SUCCESS); //等待外部晶振就绪
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB使用系统时钟
RCC_PCLK2Config(RCC_HCLK_Div2); //APB2(高速)为HCLK的一半
RCC_PCLK1Config(RCC_HCLK_Div1); //APB1(低速)为HCLK
//注:AHB主要负责外部存储器时钟。PB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。
FLASH_SetLatency(FLASH_Latency_2); //flash操作的延时
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //flash读取缓冲,加速
RCC_PLLCmd(ENABLE); //启动PLL
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){} //等待PLL启动
while (RCC_GetSYSCLKSource() != 0x08){} //等待系统时钟源的启动