一、什么是时钟?
时钟是单片机的脉搏,是系统工作的同步节拍。单片机上至CPU,下至总线外设,它们工作时序的配合,都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。
二、什么是时钟树?
STM32有很多外设器件,每个器件的时钟信号不一样,所以要将一个固定的信号频率进行倍频/分频处理,达到每个外设需要的频率。时钟信号的分频就像树的分支一样,这就是时钟树。
三、时钟介绍
HSI(内部高速时钟): 时钟信号由内部RC震荡电路提供,时钟频率为8MHz,但是这个时钟频率会随着温度产生漂移,很不稳定,所以一般不使用此时钟信号。
LSI(内部低速时钟): 时钟信号由内部RC振荡电路提供,时钟频率一般为40KHz,这个信号一般用于独立看门狗时钟。
HSE(外部高速时钟): 时钟信号由外部晶振提供,时钟频率一般在4-16MHz,是经常会用到的时钟源。
LSE(外部低速时钟): 时钟信号由外部晶振提供,时钟频率一般为32.768KHz,这个信号一般用于RTC实时时钟。
四、时钟框架图
五、框架图分析
(1)外部低速时钟LSE,外接引脚OSC32_IN和OSC32_OUT就是接外部晶振的引脚,进来的频率是32.768KHZ进来后只有一个走向就是为RTC提供时钟。
(2) RTCCLK蓝色框的四选一数据选择器,一共有三个输入,一个来自最上方的HSE,中间经过了一个128的分频器。一个是LSE以及最下方的LSI时钟。也就是说看门狗智能由内部低速时钟LSI提供时钟,RTC可以由LSI、LSE、或者是HSE经过分频后来提供时钟,具体使用哪一个需要我们在代码里面配置。
(3) PLL锁相环中的数据选择器有两个输入,一个是内部高速时钟HSI经过2分频连接。另一个输入是外部高速时钟HSE经过1分频或2分频输出后连接。经过数据选择器后,进行倍频操作供给系统时钟。对于系统时钟一般选择HSE时钟经过PLL锁相环倍频后的时钟作为系统时钟。倍频系数可选范围:2~16。
注:一般在PLL锁相环中数据选择器中我们选择来自外部高速时钟HSE的时钟信号,因为HSI时钟信号很不稳定,容易受到环境的影响。
(4)对于系统时钟选择器,一共有四个输入。最上面为HSI时钟输入,中间为PLLCLK时钟输入,下面两个分别是HSE时钟直接输入,以及在HSE后加入CSS时钟安全检测标志后输入。
六、示例
外部晶振电路:
连接外部高速时钟:
假如外部时钟晶振频率为8MHz,如何设置72MHz的系统时钟?
答:HSE接入8MHz的外部震荡信号,由PLLXTPER进行选择进行1分频还是2分频,假如是1分频,则8MHz的时钟信号来到了PLLSRC控制选择的位置,配置PLLSRC,选择进入PLL锁相环的时钟信号源,假设来自HSE的信号选通,则8MHz的信号来到锁相环中,配置PLLMUL,可以选择倍频系数,假设倍频系数选为9,则PLL输出72MHz的时钟信号,SYSCLK前面的梯形的选择逻辑控制着SYSCLK时钟信号来自于3个接入信号HSE、HIS、PLLCLK中的哪一个,通过SW和CSS控制,选择PLLCLK后,系统就可以获得72MHz的时钟频率了。这个CSS是时钟安全保护系统,主要是在HSE出现故障时发生NMI中断(不可屏蔽中断,产生这个中断的时候,表示系统发生了致命的错误),具体要看手册59页信息介绍。
为了减少功耗,STM32上外设的时钟初始状态默认为关闭,如需使用外设,则必须开启外设时钟。譬如我们现在要使用外设GPIOB,则系统时钟SYSCLK要通过预分频器AHB分频,再进入APB2总线进行再分频(GPIOB是挂载在APB2总线上的外设),时钟信号的输入和外设时钟使能位接在一个与门上,当要使用外设时,需要将这个使能位置1,配置完成之后,GPIOB方可正常工作。