01 时钟系统

1.1 时钟系统的作用

Stm32芯片中有大量的电路模块,时钟系统提供一个频率信号为电路模块提供统一的节拍,使电路模块能有序工作,最终达到控制电路的目的。


(相关资料图)

图1.1 晶振频率图

1.2 时钟周期的关系

时钟:为Stm32提供统一的节拍,形象的称时钟是单片机的心脏。

时钟周期:又名振荡周期,一个高低电平(0或1)所需要的时间。

指令周期:CPU从存储器中取出并执行一条指令所需的全部时间(取指、译码与执行三部分时间)。

机器周期:执行一个动作的时间周期,如取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。

图1.2 指令周期图

02 Stm32的时钟源

2.1 Stm32时钟树

由外部晶体振荡器提供时钟输入,最终转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径犹如大树的养分由主干流向分支,因此称为时钟树。理解系统时钟的大小如何获得(分频与倍频),其他外设的时钟又如何划分,可以通过一张时钟树图找到答案,只要理解好时钟树,Stm32一切时钟的来龙去脉就会非常清楚。

图2.1 Stm32时钟树图

2.2 时钟源的分类

Stm32有两类时钟源,一种是以晶振的内置与外置来分别,另一种以时钟的速度来区分,并由此分为如下四种类型。

图2.2 时钟源分类图

2.2.1 内置低速时钟LSI

从内部RC振荡器产生,频率为40khz,也是主要提供给实时时钟模块,同时LSI时钟担当一个低功耗时钟源,为独立看门狗和自动唤醒单元提供时钟,它可以在停机和待机模式下保持运行。

图2.3 内置低速时钟LSI

2.2.2 外置低速时钟LSE

以低速外部晶振(低速外部石英晶体或陶瓷谐振器)作为时钟源,主要是提供给实时时钟模块或者为其他定时功能提供一个低功耗且精确的时钟源(RTC时钟源),所以一般选用32.768khz的石英晶振,该频率下定时器方便取整。

图2.4 外置低速时钟LSE

2.2.3 高速内部时钟HSI

以内部RC振荡器产生,频率为8Mhz,优点是成本低且启动速度快,但相较于外部时钟不稳定,精度较差。如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。

图2.5 高速内部时钟HSI

2.2.4 外置高速时钟HSE

以外部晶振作为时钟源,晶振频率可取范围为4~16Mhz,一般采用8Mhz的晶振,为系统提供更为精确的主时钟。

图2.6 外置高速时钟HSE

03 HSE、HSI和PLL的使能

3.1 系统时钟源的使能

Stm32的时钟源主要有: 内部时钟、外部时钟、锁相环倍频输出时钟。内部时钟、外部时钟又分为高速时钟、低速时钟。系统时钟源sysclk的时钟由HSE、HSI、PLL三个时钟提供,具体在RCC_CFGR寄存器中配置。

图3.1 系统时钟源的使能

PLL锁相环倍频输出时钟又主PLL时钟、PLLI2S时钟。PLL时钟来源可以有两个:一个是HSE,另一个是HSI/2。由时钟配置寄存器CFGR的位16,即PLLSRC设置具体用哪个。HSI是内部高速的时钟信号,频率为8MHz,这里我们选择HSE作为PLL的时钟来源。

3.2 系统时钟的设置步骤

(1)开机后,先让系统启动起来,由于HSI的启动速度快,所以先启动内部HSI待系统稳定后再切高速时钟源。

(2)系统启动后,切换系统时钟的时钟源为HSE。切换时要注意,先关闭时钟相关的中断,防止中断破坏时钟源的切换。

(3)设置HSE的信号源,外部晶振不旁路,然后开启HSE,并等待HSE稳定;HSE稳定后,配置Stm32工作于高性能模式下,配置PWR_CR寄存器。

(4)配置AHB、APB1和APB2的分频系数;配置PLL的分频、倍频系数,然后开启PLL,等待PLL输出稳定。

(5)配置指令预取、指令cache、数据cache等使能;选择主PLL为系统时钟,并等待其稳定。

04 锁相环PLL的内部结构

4.1 锁相环内部结构

PLL是锁相环,用于倍频输出,因为开发板外部高速晶振也只有8M,如果要使芯片的最大时钟频率是72M,可通过PLL锁相环来倍频。它是由HSL或者HSI驱动产生的一个时钟,先经过分频器M,再经过倍频器N,再经过分频器P出来,形成PLL时钟源,供给外设或者系统时钟使用的。

图4.1 PLL的时钟结构图

图4.2 锁相环原理图

PLL计算公式 : x=f / m * n / p;

x为PLL频率,f为输入时钟源(HSL、HSI)时钟频率,m、p为分频器,n为倍频器。

05 众多时钟的分配

5.1 时钟的分配

因为Stm32的外设繁多,外设的运作所需要的最佳时钟各不相同,如果所有时钟同时运行会给MCU带来极大的负载,所以Stm32采取的时钟管理方式是——随用随开。

图5.1 时钟分配原理图

(1)送给AHB总线(Advanced Hight Bus高级高性能总线)如内核、内存和DMA使用的HCLK时钟。

(2)Systick时钟

8分频后给Stm32的系统定时器作为时钟源。

(3)CPU主频

给Cortex的自由运行时钟FCLK,用来采样中断和为调试模块计时。

(4)送给APB1(Advanced Peripheral Bus先进外设低速总线)低速预分频器APB1。

(5)送给APB2(Advanced Peripheral Bus先进外设高速总线)高速预分频器APB2。

图5.2 AHB的时钟结构

5.2 最终时钟外设分配

最开始的节拍通过图5.1的时钟流程走下来,经历了一系列的分频和倍频,得到了几个与我们开发密切相关的时钟。

(1) SYSCLK:系统时钟,是Stm32大部分器件的时钟来源,主要由AHB预分频器分配到各个部件。

(2) HCLK:由AHB预分频器直接输出得到,它是高速总线AHB的时钟信号,提供给存储器,DMA及Cortex内核,是Cortex内核运行的时钟,CPU主频就是这个信号。

(3) FCLK:由AHB输出得到,是内核的“自由运行时钟”。“自由”表现在它不来自时钟HCLK。因此在HCLK停止时FCLK也可以继续运行,也就是说,即使CPU休眠了,也能够采样到外部中断和跟踪休眠事件,低功耗模式下使用。

(4) PCLK1:外设时钟,由APB1分频得到,最大可为72Mhz,提供给APB1总线上的外设使用。

(5) PCLK2:外设时钟,由APB2预分频输出得到,最大为72Mhz,提供给APB2总线上的外设。

06 APB1和APB2总线上挂接的模块

6 APB1和APB2总线上挂接的模块

总线是嵌入式系统主机部件之间传送信息的公用通道,物理上对应一组组导线(地址总线,数据总线,控制总线),CPU、内存、输入输出、各种外设之间的比特信息都在这些总线上传输,Stm32微处理器的总线有两类,分别是AHB和APB。

AHB先进高性能总线是一种系统总线,主要用于高性能模块(如CPU、D MA和DSP等)之间的连接。AHB系统由主模块、从模块和基础结构3部分组成,整个AHB总线上的传输都由主模块发出,由从模块回应。

APB是先进外设总线,是一种外围总线,APB主要用于低带宽的周边外设之间的连接,如USART串口、IO、AD/DA等不需要很高的时钟频率的外设,因此功耗就比较低。

07 应用场景

7 应用场景

调节 CPU 的运行频率,来控制系统的性能与功耗。比较典型的例子就是说手机/笔记本电脑都有高性能模式、平衡模式、低性能模式。

图7.1 Android的性能模式

图7.2 Apple的性能模式

08 总结展望

8 总结

当我们在拿到一款新的芯片时,查看它的时钟框图,可以获取一些信息,为后面的应用芯片准备:

(1)了解单片机的时钟系统的时钟源,及时钟频率为多少

(2)观察系统时钟Sysclk由哪几个时钟源驱动

(3)最后观察时钟树图了解外设分别挂在哪个时钟线或者时钟源上

推荐内容