在单片机中,时钟的概念非常重要,这次记录一下时钟树相关的知识。
STM32的时钟树是由多个时钟源和时钟分频组成的,为STM32芯片提供各种时钟信号。也就是说,在使用STM32的时候,所有的频率和时钟都是通过时钟树产生的。
那么既然提到时钟源,肯定要先说明来源,STM32的基础时钟源有4个HSI振荡器时钟 、HSE振荡器时钟 、LSI振荡器时钟 、LSE振荡器时钟。这是最底层的时钟来源。
HSI就是高速内部时钟,通过说明可以看到是由RC振荡器产生的8Mhz。
HSE就是高速外部时钟,通过说明可以看到是通过外部引入的,一般就是芯片上的石英晶振,通常也是8Mhz。
LSE就是低速外部时钟,通过说明可以看到是通过外部引入的,可以看到上面是32.768Khz,选用这个数值是它后面直接接入到RTC,因为RTC需要1hz,这个特殊的数值易于分频得到1hz。
LSI就是低速内部时钟,通过说明可以看到是由RC振荡器产生的40Khz。
在时钟源的后面,就是各个时钟源的去向,通过图来理解,不同时钟源的去向是不同的,框图里面的可以简单理解成多选一的数选器的功能,就是用来选定一个时钟来源的。
来看第一个框,可以看到SYSCLK的来源是在HSI,HSE,PLLCLK中选择一个,其中PLLCLK那个看起来很乱的东西就是分频和倍频;下面在HSE和其2分频中选一个通入到上面,再和HSI 的2分频进行选择,之后PLLMUL就是倍频,为什么要倍频,可以看到后面的SYSCLK最大是72Mhz,但是HSI和HSE最大也就是8Mhz,倍频就是把频率增加,可以看到PLLMU有多种选择,x2,x4最多是16倍倍频,具体使用哪一个需要我们在代码里面配置。
那么在来看第二个框就好理解了,RTC的时钟源可以由LSI、LSE、或者是HSE经过分频后来提供时钟,独立看门狗的时钟就是LSI了,具体使用哪一个需要我们在代码里面配置。
再来看后面的框图,可以看到AHB,AHB就是先进高性能总线,在AHB总线上有一条时钟线HCLK,这条时钟线就连接到DMA,内存,CPU等,其中系统时钟就是系统滴答时钟。
可以看到,各种外设并没有直接连接在AHB总线上,而是挂载在了APB1和APB2,APB就是先进外设总线,APB1和APB2桥连在了AHB总线总线上,所以APB1和APB2的时钟线也就是HCLK,APB1和APB2再通过各种分频处理之后连接到相应的外设,其中可以看到都有一个外设使能位,就是在函数里面配置的时钟初始化。
注意到HCLK和SYSCLK, 系统时钟SYSCLK最大频率为72MHz,它是供STM32中绝大部分部件工作的时钟源。系统时钟可由PLL、HSI或者HSE提供输出,并且它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。
最下面这一部分就是各时钟源的输出,可以在外部使用示波器来查看其频率与设定的是否正确。
参考资料
【STM32】超清晰STM32时钟树动画讲解_哔哩哔哩_bilibili
嵌入式学习笔记——STM32的时钟树_stm32时钟树-CSDN博客
STM32中的几个时钟SysTick、FCLK、SYSCLK、HCLK - Darrick_Jan - 博客园 (cnblogs.com)