今天来总结一下stm32单片机的时钟系统,也就是时钟树的相关知识点。单片机正常工作的三要素是电源、时钟、复位电路。由此可以说,时钟的正常工作是单片机正常工作的必要不充分条件。我们常常会把时钟比喻为单片机的心脏,其重要性不言而喻。
就是这个“心脏”心跳的频率,决定着单片机这个“人“各个”器官“的工作频率。我们系统时钟来源于它,各个外设的工作频率也是经过它分频或者倍频得出来的,任何外设要想工作,必须打开相对应的时钟。频率设置得高,那么单片机处理指令的速度也就会越快,越高效。同时,频率设置得越高,单片机的功耗也就会相应地提高。如果在一些对功耗有要求的产品上,都会把不用的外设时钟关掉。
还有众所周知的是,如果单片机的时钟频率越高,那么高低电平的上升沿或者下降沿所需要的时间就会越短。这样整个系统的抗干扰能力就会随着时钟频率的增加而下降。所以如果遇到系统EMS相关问题,可以从这个方向进行验证考虑。
那么结合下面stm32f1 与stm32f4的两幅时钟树的block diagram,以及我自己对时钟的理解,来做一个总结。
stm32f1时钟树
stm32f4时钟树
1、无论是stm32f1,还是stm32f4,都有五个时钟源:为HSI、HSE、LSI、LSE、PLL。其中PLL锁相环倍频时钟源,是将HSI和HSE倍频后输出的。
HSI:High Speed Internal 是高速内部时钟,RC振荡器,stm32f1频率为8MHz,stm32f4频率为16MHz。
HSE: High Speed External 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,stm32f1的频率范围为4MHz~16MHz,stm32f4的频率为4~26MHz。
LSI:Low Speed Internal 是低速内部时钟,RC振荡器,stm32f1的频率为40kHz,stm32f4的频率为32kHz。
LSE:Low Speed External是低速外部时钟,stm32f1与stm32f4均是接频率为32.768kHz的石英晶体。
PLL:Phase Lock Loop 为锁相环倍频输出,其时钟输入均由HSE或HSI提供。stm32f1的输出频率最大不得超过72MHz,stm32f4的输出频率最大不得超过168MHz。
2、PLLCLK - PLL时钟
stm32f1:
其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。可以为SYSCLK提供时钟源,也可以经过分频器为USBCLK提供时钟的输入源。
stm32f4:
主PLL时钟:由HSE或HSI提供。可以为SYSCLK提供时钟的输入源。
PLL I2S时钟:由HSE或HSI提供。输出可以为I2S提供时钟的输入源。
3、系统时钟SYSCLK是供STM32中绝大部分部件工作的时钟源。从两幅图中可以看出,stm32f1与stm32f4的系统时钟SYSCLK均有三个来源,分别是:HSI、HSE和PLL。大部分时候,STM32的系统时钟是通过PLL经过倍频来完成。其中,stm32f1经过PLL倍频后,可以达到的最大的系统时钟频率是72MHZ,stm32f4经过PLL倍频后,可以达到最大的系统时钟频率是168MHZ。
关于stm32时钟树就先总结到这里。更加详细的就不讲了,结合ST官方的时钟树框图,可以很明了地了解到各个系统外设的时钟来源及走向。实际开发中,在编写代码的时候结合时钟树的框图,相信就可以做到更深入的理解。