stm32f10x时钟系统(一)
时钟框图说明
stm32f10x时钟系统框图如下:
蓝色四边形是时钟源,灰色四边形是选择器,另外一种颜色的是(预)分频器;比如32MHz经过二分频就是16MHz。
5个时钟源,一个系统时钟(SYSCLK)
HSI:高速内部时钟(大约8MHz);由RC振荡器产生,RC振荡器产生的时钟是不稳定的
HSE:高速外部时钟(4~16M, 正点原子的8M),晶振产生
PLL:锁相环;用来倍频的(2~16倍),输出一个PLLCLK时钟
上面三个时钟都可以作为系统时钟的来源。
CSS:时钟监控系统。它有什么用呢?一般来说,都是选择HSE时钟作为系统时钟,但是由于HSE的时钟来源是外部的;可以会出现某些意外:比如晶振不起振了;这时候CSS就会选择HSI作为系统时钟。
LSE:低速外部时钟,频率一般为:32.768KHz,外接晶振产生。一般用来给RTCCLK使用;RTCCLK是实时时钟,
LSI:低速内部时钟,频率约为40KHz,由RC振荡器产生;主要功能给独立看门狗时钟使用
上述是五个时钟源信号。
MCO是一个引脚,对应PA8,它可以输出时钟信号;包括:SYSCLK、HSI、HSE、PLLCLK/128
USB时钟:PLLCLK经过USB分频器(1或者1.5倍)得来;USB时钟是48MHz,PLLCLK的时钟信号为72MHz或者48MHz,如果为72MHz,那么USB分频器就设置1.5倍分频,如果是48MHz,那么USB分频器就设置1倍分频
SYSCLK时钟经过AHB预分频器(分频因子为1,2,4,8,16,32,64,128,256)可以给HCLK时钟;或者经过AHB预分频器在经过APB1预分频器变成36MHz的时钟,给挂在APB1总线下的低速器件使用,或者经过APB2预分频器变成72MHz的时钟信号给挂在APB2总线下的高速器件使用。
小结
- STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
- HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
- HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
- LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。WDG
- LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC 、
- PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。
倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
- 系统时钟SYSCLK可来源于三个时钟源:
- HSI振荡器时钟
- HSE振荡器时钟
- PLL时钟
STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL
输出的2分频、HSI、HSE、或者系统时钟。任何一个外设在使用之前,必须首先使能其相应的时钟。
几个常用的寄存器:
- AHBENR寄存器: DMA,SDIO等时钟使能
- APB1ENR寄存器:APB1总线上外设时钟使能
- APB2ENR寄存器:APB2总线上外设时钟使能
- CR 寄存器:HSI,HSE,CSS,PLL等的使能和就绪标志位,因为有些时钟源刚使能完不一定能马上稳定,需要等一段时间,当稳定之后就会在该寄存器相应的位置位,通过查看寄存器的值就可以知道该时钟源是否已经稳定
- CFGR寄存器:时钟源的选择和分频系数的设定,可以看上图。
库函数版本
上述的寄存器在库函数版本中都有相应的库函数可以调用。
- 时钟使能配置:
RCC_LSEConfig() 、RCC_HSEConfig()、
RCC_HSICmd() 、 RCC_LSICmd() 、 RCC_PLLCmd() …… - 时钟源相关配置:
RCC_PLLConfig ()、 RCC_SYSCLKConfig() 、
RCC_RTCCLKConfig() … 分频系数选择配置:
RCC_HCLKConfig() 、 RCC_PCLK1Config() 、 RCC_PCLK2Config()…外设时钟使能:
RCC_APB1PeriphClockCmd(): //APB1线上外设时钟使能
RCC_APB2PeriphClockCmd(); //APB2线上外设时钟使能
RCC_AHBPeriphClockCmd(); //AHB线上外设时钟使能其他外设时钟配置:
RCC_ADCCLKConfig (); RCC_RTCCLKConfig();状态参数获取参数:
RCC_GetClocksFreq();
RCC_GetSYSCLKSource();
RCC_GetFlagStatus()- RCC中断相关函数 :
RCC_ITConfig() 、 RCC_GetITStatus() 、 RCC_ClearITPendingBit()…
前面系统初始化的函数在ST官方的固件库里面都设置好了,直接设置的寄存器,因此不需要自己手动使能
参考资料
- 正点原子视频
- stm32中文参考手册