很多人平时用STM32的时候一般都不会考虑STM32的内部各种时钟(HCLK、PCLK1、PCLK2等)问题。只知道一个系统时钟频率。但是当你看到STM32的时钟树的时候有没有发现STM32内部的各个时钟都是由分频器或者PLL锁相环来确定的。STM32时钟树图(如下图)
那么问题就来了,这些分频器和锁相环的参数以及系统时钟源的选择是从哪里设置的呢?是什么时候设置的?
答案:在system_stm32f10x.c文件和启动文件中。
(这里以STM32f103为例)
STM32启动文件中会调用SystemInit()函数来设置分频器和锁相环的参数以及系统时钟的选择等。
而SystemInit()函数,就是在system_stm32f10x.c文件中定义的。
打开该文件可以看到如下注释:
然后深入这个函数内部,
使能高速外部晶振(HSE),(我的板子焊接的是8MHz的晶振)
PLL锁相环9倍频。8MHz的晶振九倍频就是72MHz了,也就是系统时钟频率(SYSCLK)。
第1行,这里就是配置AHB预分频器的值为1,即等于系统时钟频率。HCLK=72MHz。
第2行,APB2预分频器的值也是1,也等于系统时钟频率。PCLK2=72MHz。
第3行,APB1预分频器的值是2分频,也就是HCKL的二分频,PCLK1=36MH。
以上就是STM32f103初始化时候的各种时钟的初始值,也就是默认值。
建议大家学习一下时钟树,有利于加深对STM32的理解。
以上内容仅供参考,如有不当或错误之处,望指出。