首先什么是时钟
众所周知,stm32有众多时钟,那么回到最基本的,什么是时钟呢,那么简单来说,时钟就像是单片机的脉搏,是单片机的驱动源,使用任何一个外设都必须打开相应的时钟。每个时钟一到,系统都会处理一步数据,这样才能让工作不出现紊乱。
时钟产生的原理
简单的说,没有晶振就没有时钟周期,就无法执行程序代码,单片机就无法工作。它主要是由石英晶体做成的,它和外电路产生谐振,用来控制CPU的时钟频率,也就是产生高低电平的周期,一般来说,频率越高处理速度越快。
单片机工作时,是一条一条地取指令,然后一步步地执行。单片机访问一次储存器的时间,称为一个机器周期,这是一个时间基准。一个机器周期包括12个时钟周期。如果单片机选择了12MHz的晶振,它的时钟周期就是1/12us,它的机器周期就是12*(1/12)us,也就是1us访问一次存储器。
为什么要设置不同的时钟呢
首先,任何外设都需要时钟,51单片机,stm32等等。51单片机不需要配置时钟,是因为一个时钟使能之后所有相关的功能都可以用了,而这个时钟是默认开启的。stm32是低功耗的,它将所有的始终都默认设置为disable状态,在你需要用哪个时钟的时候,开哪个时钟就可以,也就是说用到什么外设,只要打开对应外设的时钟就可以,其他的没用到的就还是disable,这样能耗就会减少。
用一个简单的比喻来形容,单片机的资源就好比一个水库里的水,不同的时钟就好比很多个门,每个门都能出水,时钟可以是认为门的开关。在51单片机中一个时钟就把所有用到时钟的外设都控制了,而stm32的时钟是有分工的,而且每类时钟的频率不一样,因为没必要所有时钟都是最高频率的,只要够用就行了,就好比一个门分出来的水流的大小,你只要洗个脸,但是出来的是像洪水一般的水流,那就尴尬了,消耗能源也多,所有不同的时钟会有频率差别,或者在配置的时候可以配置时钟分频。
stm32中时钟的分类
在STM32F1中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。
外部时钟
- 高速外部时钟(HSE):外部时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振。
- 低速外部时钟(LSE):外部时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。
内部时钟
- 高速内部时钟(HSI):由内部RC振荡器产生,频率为8MHz,但不稳定。
- 低速内部时钟(LSI):由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。
PLL时钟
- Phase Lock Loop 为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
时钟树理解
对于stm32f4的板子
1、LSI低速内部时钟:由内部RC振荡器产生,频率为32kHz。如图区域①;
2、HSI高速内部时钟:由内部RC振荡器产生,频率为16MHz。如图区域②;
3、LSE低速外部时钟:一般由外部晶振提供,频率为32.768kHz。如图区域③;
4、HSE低速外部时钟:一般由外部晶振提供,频率为4~26MHz。如图区域④;
5、主PLL时钟:由HSE或HSI提供。如图区域⑤;
6、PLLI2S时钟:由HSE或HSI提供。如图区域⑥;
时钟的流向
我们已经知道了各个时钟源的输入,那么有了输入的时钟源,各个时钟源又是分别输出给哪些外设工作。我们分别从时钟源输入处开始,根据走线和结点,寻找到相应的输出。对应编号如下图中所示。
1、LSI低速内部时钟:供给独立看门狗⑴、实时时钟RTC⑵
2、HSI高速内部时钟:供给系统时钟⑸、时钟输出1MCO1⑷、主PLL时钟⑹、PLLI2S时钟⑺
3、LSE低速外部时钟:供给实时时钟RTC⑵、时钟输出1MCO1⑷
4、HSE低速外部时钟:供给系统时钟⑸、实时时钟RTC⑵、主PLL时钟⑹、PLLI2S时钟⑺、时钟输出1MCO1⑷、时钟输出2MCO2⑶
5、主PLL时钟:供给系统时钟⑸、外设时钟⑻、时钟输出1MCO1⑷、时钟输出2MCO2⑶
6、PLLI2S时钟::供给I2S时钟⑼、时钟输出1MCO1⑷、时钟输出2MCO2⑶
HSI、HSE、主PLL时钟都可以供给系统时钟⑸,STM32的很多外设是挂载在AHB、APB总线桥上的,这些外设的时钟又是怎么样的,这就和系统时钟的流向有关了,系统时钟的流向分析如下:
1、供给时钟输出2MCO2⑶
2、供给以太网PTP时钟⑽
3、经AHBPRESC预分频器⑾后:HCLK到AHB总线、内核、存储器和DMA⒁,到Cortex系统定时器⒂,自由运行时钟⒃
4、经AHBPRESC预分频器⑾、APBxPRESC预分频器⑿后:供给APBx外设时钟⒄
5、经AHBPRESC预分频器⑾、APBxPRESC预分频器后⑿,再经倍频条件判断⒀处理后:供给APBx定时器时钟⒅
在程序中的配置
不同寄存器的作用具体说明参考《stm32 Reference manual》
时钟总结
1:STM32共有5个时钟源。
2:系统始终SYSCLK可来源于三个时钟源:
- HSI振荡器时钟
- HSE振荡器时钟
- PLL时钟
3:用户可以通过多个预分频器配置AHB,高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2的最大频率是72MHz。APB1的最大允许频率是36MHz。
4:当不被使用时,任意一个时钟源都可以被独立地启动或关闭,由此优化系统功耗。
参考:链接1 链接2