STM32时钟树系统及初始化

stm32的时钟不是很复杂,在CUBEMX里是可以直接图形化配置的,而且在启动文件的复位中断里进行了初始化

先讲一下时钟树

认识STM32的时钟管理方式后就要对其时钟树系统有一个大体的掌握,时钟树系统的结构如下,从图中可以知晓有多少时钟、时钟速度为多少、时钟如何分配等。图看起来很复杂,但我们只需要大体了解其运作流程即可。
STM32时钟树系统及初始化_第1张图片
各类时钟简括:

1.HSE时钟(高速外部时钟):来源为外部无源晶振,通常速度8M。由RCC_CR时钟控制寄存器中的16:HSEON控制。

2.HSI时钟(高速内部时钟):来源为芯片内部,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,知道HSE启动成功,相当于HSE的替补。由RCC_CR时钟控制寄存器的位0:HSION控制。

3.PLLCLK(锁相环时钟):来源为HSI/2、HSE经过倍频所得。由CFGR(时钟配置寄存器)中PLLXTPRE、PLLMUL控制。

4.SYSCLK(系统时钟):来源为HSI、HSE、PLLCLK,最高速度为72M。
由CFGR中的SW控制。

5.HCLK(AHB高速总线时钟):来源由系统时钟分频得到,速度最高为72M。由CFGR中的HPRE控制。

6.PCLK1(APB1低总线时钟):来源为HCLK分频得到,速度最高为36M ,为APB1总线上的外设提供时钟。由RCC_CFGR时钟配置寄存器的PPRE1位控制。

7.PCLK2(APB2高总线时钟):来源为HCLK分频得到,速度最高为72M,为APB2总线上的外设提供时钟。由RCC_CFGR时钟配置寄存器的PPRE2位控制。

8.RTC时钟:来源为HSE_RTC(HSE分频得到)、LSE、LSI,为芯片内部的RTC外设提供时钟。由RCC备份域控制寄存器RCC_BDCR中RTCSEL控制。

9.MCO时钟输出 :来源为PLLCLK/2、HSE、HSI、SYSCLK,微控制器时钟输出引脚,由PA8复用所得。由CRGR中MCO控制。

再结合图示就很好理解了,可以看看CUBEMX里的图形化配置,挺直观的

STM32时钟树系统及初始化_第2张图片
其实调来调去就是那几个锁相环和分频器

再看程序

在标准库里面它是在SystemInit里初始化好了才进入main里面的
STM32时钟树系统及初始化_第3张图片
STM32时钟树系统及初始化_第4张图片
其实人家都给写好了,我们直接用就行。。。
更改这个.c文件前面的宏定义就行
STM32时钟树系统及初始化_第5张图片
如果要自己去折腾,可以调用stm32f10x_rcc.h(Hal库里也有类似的库),里面注释十分清楚(打开有道翻译科学上网没问题的)。超频什么的可以试试,不过单片机没什么太大意义。。。一般是为了追求低功耗降低频率。。。
写一个时钟初始化函数在main函数的最开始初始化就行。不过官方的rcc库做的不是很好个人感觉。。。

你可能感兴趣的:(stm32)