时间:2024.10.21-10.23
参考资料:
《零死角玩转STM32》“RCC-使用HSE/HIS配置时钟”章节
TIPS:
从前面的历程中我们知道,程序在启动的时候会执行汇编文件,汇编文件里会调用System_Init(固件库编程的函数),它里面会把时钟初始化成72M,因此前面我们在用固件库写程序的时候,有关时钟这一部分就忽略了。
一、学习内容
1、时钟树
书P119图15-5时钟树
1.1时钟树主系统时钟讲解
1.1.1HSE时钟
HSE:
High Speed External Clock signal,高速的外部时钟
来源:
无源晶振(4-16M),通常使用8M
控制:
RCC_CR时钟控制寄存器的位16:HSEON控制
晶振电路原理图
霸道和指南者开发板使用的都是8M的无源晶振。
TIPS:
当使用无源晶振时,时钟从OSC_IN和OSC_OUT进入,并且要配谐振电容
当使用有源晶振时,时钟从OSC_IN引脚进入·,OSC_OUT悬空
1.1.2HSI时钟
HSI:
与高速的HSE相对应有一个内部的HSI,它也是8M的高速时钟信号
Low Speed Internal Clock signal,高速的内部时钟
来源:
芯片内部,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,直至HSE启动成功。
控制:
RCC_CR时钟控制寄存器的位0:HSION控制
HSE和LSE的区别:
HSE的精度比较高,LSE的精度比较小,受温度的影响比较大,会存在温漂
当把位16置1时,表示HSE振荡器开启,因为它是无源的,需要和起振电容一起配置来起振。
起振需要一定的时间,如果它启动完毕,就会有位7HSERDY外部高速时钟就绪标志=1,当这个位为1时,表示外部4-16MHz振荡器就绪。
对HSI有两个位,位0的HSION和位1的HSIRDY,和HSE的两个位类似。
1.1.3 一般配置系统时钟的流程:
利用HSE8M经过倍频,一般九倍频,配置成72M,当HSE故障时,HSI就会被选为系统时钟,那么此时整个系统就会被配置成8M,和瘫痪状态差不多。
1.1.4锁相环时钟PLLCLK
来源:
(HSI/2、HSE)通过倍频所得
控制:
CFGR:PLLXTPRE、PLLMUL
注意:
PLL时钟源头使用HSI/2的时候,PLLMUL最大只能是16,这个时候PLLCLK最大只能是64M,小于ST官方推荐的最大时钟72M
1.1.5系统时钟
锁相环时钟:
SYSCIK,最高为72M(ST官方推荐的)
来源:
(HSI、HSE、PLLCLK)通过倍频所得
控制:
CFGR:SW
注意:
通常的配置是SYSCLK=PLLCLK=72M
配置好系统时钟以后,单片机里有很多条总线,由SYSCLK出来后有一个AHB分频器,用于配置AHB总线,在AHB总线的基础上还有两个预分频器APB1和APB2,这两条总线上挂载了很多外设,我们在配置系统时钟时只配置好AHB、APB1、APB2这三条总线的时钟,具体外设的时钟当我们真正需要使用这个外设的时候再具体地配置
我们在配置系统时钟时只配置好AHB、APB1、APB2这三条总线的时钟
这三条总线的分频因子配置:
1.1.6HCLK时钟
HCLK:
AHB高速总线时钟,速度最高为72M。为AHB总线的外设提供时钟、为Cortex系统定时器提供时钟(SysTick)、为内核提供时钟(FCLK)
AHB:
advanced high-performance bus
来源:
系统时钟分频得到,一般设置HCLK=SYSCLK=72M
控制:
CFGR:HPRE
1.1.7PCLK1时钟
PCLK1:
APB1低速总线时钟,速度最高为36M。为APB1总线的外设提供时钟。2倍频后则为APB1总线的定时器2-7提供时钟,最大为72M。
来源:
HCLK分频得到,一般设置PCLK1=HCLK/2=36M
控制:
RCC_CFGR时钟配置寄存器的PPRE1位
1.1.8 PCLK2时钟
PCLK2:
APB2高速总线时钟,速度最高为72M。为APB2总线的外设提供时钟。为APB1总线的定时器1和8提供时钟,最大为72M。
来源:
HCLK分频得到,一般设置PCLK1=HCLK=72M
控制:
RCC_CFGR时钟配置寄存器的PPRE2位
1.2时钟树其他时钟讲解
1.2.1 RTC时钟
RTC时钟:
为芯片内部的RTC外设提供时钟。
来源:
HSE_RTC(HSE分频得到)、LSE(外部32.768KHZ的晶体提供)、LSI(32KHZ)
控制:
RCC备份域控制寄存器RCC_BDCR:RTCSEL位控制
无源的,需要配置10pf的起振电容
1.2.2 独立看门狗时钟
独立看门狗时钟:
IWDGCLK,由LSI提供。
1.2.3 MCO时钟输出
MCO:
microcontroller clock output,微控制器时钟输出引脚,由PA8复用所得。