CM3/4时钟系统
- 1. CM3时钟系统
- 1.1 输入时钟源------------------A
- 1.2 锁相环PLL------------------B
- 1.3 系统时钟SYSCLK--------C/D/E/F/G
- 2. CM4时钟系统
- 2.1 输入时钟源------------------A
- 2.2 锁相环PLL------------------B
- 2.3 系统时钟SYSCLK--------C/D/E
- 2.4 时钟信号输出MCO--------F
数字电路的知识告诉我们:任意复杂的电路控制系统都可以经由门电路组成的组合电路实现。STM32 内部也是由多种多样的电路模块组合在一起实现的。当一个电路越复杂,在达到正确的输出结果前,它可能因为延时会有一些短暂的中间状态,而这些中间状态有时会导致输出结果会有一个短暂的错误,这叫做电路中的“毛刺现象”,如果电路需要运行得足够快,那么这些错误状态会被其它电路作为输入采样,最终形成一系列的系统错误。为了解决这个问题,在单片机系统中,设计时以时序电路控制替代纯粹的组合电路,在每一级输出结果前对各个信号进行采样,从而使得电路中某些信号即使出现延时也可以保证各个信号的同步,可以避免电路中发生的“毛刺现象”,达到精确控制输出的效果。
由于时序电路的重要性,因此在 MCU 设计时就设计了专门用于控制时序的电路,在芯片设计中称为时钟树设计。由此设计出来的时钟,可以精确控制我们的单片机系统,一个 MCU 越复杂,时钟系统也会相应地变得复杂,如 STM32F4 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就可以解决一切。对于 STM32F4 系列的芯片,正常工作的主频可以达到 168Mhz,但并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及 RTC 只需要几十 Khz 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。
STM32 本身非常复杂,外设非常的多,为了保持低功耗工作,STM32 的主控默认不开启这些外设功能。用户可以根据自己的需要决定 STM32 芯片要使用的功能,这个功能开关在 STM32主控中也就是各个外设的时钟。
1. CM3时钟系统
A
表示输入时钟源,可分为外部时钟源和内部时钟源;
B
为一个特殊的振荡电路锁相环“PLL”;
C
为系统时钟源选择器,决定 MCU 的系统主时钟“SYSCLK”的大小;AHB 预分频器将 SYSCLK 分频或不分频后分发给其他外设进行处理;
D
为定时器等外设的时钟源 APB1;
E
为定时器等外设的时钟源APB2;
F
为 Cortex-M 内核系统的时钟;
G
为 STM32 的时钟输出功能。
1.1 输入时钟源------------------A
2 个外部时钟源:
外部时钟源
就是从外部通过接晶振的方式获取时钟源,故而都有精度高的优点。
- 高速外部振荡器 HSE:外接石英/陶瓷谐振器,频率为 4MHz~26MHz。本开发板使用的是 8MHz。
- 低速外部振荡器 LSE:外接 32.768kHz 石英晶体,主要作用于 RTC 的时钟源。
2 个内部时钟源:内部时钟源
就是芯片上电即可产生,不需要借助外部电路。
- 高速内部振荡器 HSI:由内部 RC 振荡器产生,频率为 8MHz。芯片上电时默认由内部的 HSI 时钟启动。
- 低速内部振荡器 LSI:由内部 RC 振荡器产生,频率为 40kHz,可作为独立看门狗的时钟源。
1.2 锁相环PLL------------------B
锁相环是自动控制系统中常用的一个反馈电路,在 STM32 主控中,锁相环的作用主要有两个部分:输入时钟净化和倍频。
输入时钟净化
是利用锁相环电路的反馈机制实现;
输入时钟倍频
用于使芯片在更高且频率稳定的时钟下工作。在 STM32 中,锁相环的输出也可以作为芯片系统的时钟源。
标号 ①由寄存器 RCC_CFGR 的 bit17 位控制(HSE不分频/HSE2分频),经过 HSE 分频器处理后的输出振荡时钟信号比直接输入的时钟信号更稳定。标号 ②是 PLL 时钟源的选择器,由寄存器 RCC_CFGR 的 bit16 位进行控制,选择 HSI 或 HSE 作为输入源。
标号 ③是 PLL 倍频系数,由寄存器 RCC_CFGR 的 bit8~21 (PLLMUL)位进行设置,设置范围是 2~16。
例如:要实现 72MHz 的主频率,我们通过选择 HSE 不分频作为 PLL 输入的时钟信号,即输入 8Mhz,通过标号③选择倍频因子,可选择 2-16 倍频,我们选择 9 倍频,这样可以得到时钟信号为 8*9=72MHz。
1.3 系统时钟SYSCLK--------C/D/E/F/G
STM32 的系统时钟 SYSCLK 为整个芯片提供了时序信号。我们已经大致知道 STM32 主控是时序电路链接起来的。对于相同的稳定运行的电路,时钟频率越高,指令的执行速度越快,单位时间能处理的功能越多。STM32 的系统时钟是可配置的,在 STM32F4 系列中,它可以为HSI、PLLCLK、HSE 中的一个,通过 CFGR 的位 SW[1:0]设置。
如图可知,AHB、APB1、APB2、内核时钟等时钟通过系统时钟分频
得到。标号 C 是系统时钟输入选择【外部高速时钟 HSE(8M)、内部高速时钟 HSI(8M)、经过倍频的 PLL CLK(72M)】
标号 D 是AHB 预分频器【分频系数为 1,2,4,8,16,32,64,128,256】
标号 E 是低速 APB1 预分频器【分频因子未 1,2,4,8,16】,片上低速的外设就挂载在该总线上,例如有看门狗定时器
、定时器 2/3/4/5/6/7
、RTC 时钟
、USART2/3/4/5
、SPI2(I2S2)
、SPI3(I2S3)
、I2C1
、I2C2
、CAN
、USB 设备
、2 个 DAC
。
标号 F 是高速 APB2 预分频器【分频因子未 1,2,4,8,16】,与 APB2 高速总线链接的外设有外部中断
、唤醒控制
、7 个通用目的输入/输出口(PA、PB、PC、PD、PE、PF 和 PG)
、定时器 1
、定时器 8
、SPI1
、USART1
、3 个 ADC
、内部温度传感器
。
AHB 总线时钟直接作为
SDIO
、FSMC
、AHB 总线
、Cortex 内核
、存储器
、DMA的 HCLK 时钟
,并作为 Cortex 内核自由运行时钟 FCLK。标号 H 是USB CLK,是一个通用串行接口时钟,时钟来源于 PLLCLK。
标号 I 是MCO 输出内部时钟,STM32 的一个时钟输出 IO(PA8),它可以选择一个时钟信号输出,可以选择为 PLL 输出的 2 分频、HSI、HSE、或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。时钟的选择由时钟配置寄存器(RCC_CFGR)中的 MCO[2:0]位控制。
标号 J 是RTC 定时器,其时钟源为 HSE/128、LSE 或 LSI。
2. CM4时钟系统
A
表示输入时钟源,可分为外部时钟源和内部时钟源;
B
为一个特殊的振荡电路锁相环“PLL”;
C
为系统时钟源选择器,决定 MCU 的系统主时钟“SYSCLK”的大小;AHB 预分频器将 SYSCLK 分频或不分频后分发给其他外设进行处理;
D
为内核系统的时钟和使能单元;
E
为定时器以及其它外设的时钟源 APB1/APB2;
F
为 STM32 的时钟输出功能;
2.1 输入时钟源------------------A
2 个外部时钟源:
外部时钟源
就是从外部通过接晶振的方式获取时钟源,故而都有精度高的优点。
- 高速外部振荡器 HSE:外接石英/陶瓷谐振器,频率为 4MHz~26MHz。本开发板使用的是 8MHz。
- 低速外部振荡器 LSE:外接 32.768kHz 石英晶体,主要作用于 RTC 的时钟源。
2 个内部时钟源:内部时钟源
就是芯片上电即可产生,不需要借助外部电路。
- 高速内部振荡器 HSI:由内部 RC 振荡器产生,频率为 16MHz。芯片上电时默认由内部的 HSI 时钟启动。
- 低速内部振荡器 LSI:由内部 RC 振荡器产生,频率为 32kHz,可作为独立看门狗的时钟源。
2.2 锁相环PLL------------------B
锁相环是自动控制系统中常用的一个反馈电路,在 STM32 主控中,锁相环的作用主要有两个部分:输入时钟净化和倍频。
输入时钟净化
是利用锁相环电路的反馈机制实现;
输入时钟倍频
用于使芯片在更高且频率稳定的时钟下工作。在 STM32 中,锁相环的输出也可以作为芯片系统的时钟源。
标号 ① 是 PLL 时钟源的选择器,由寄存器 RCC_PLLCFGR 的 bit22 位进行控制,选择 HSI 或 HSE 作为输入源。
标号 ② 是 PLL 输入时钟的分频系数,由寄存器 RCC_PLLCFGR 的 bit0~5 (PLLM)位进行设置,设置范围是 0~63。
标号 ③ 是 PLL 倍频系数,由寄存器 RCC_PLLCFGR 的 bit6~14 (PLLN)位进行设置,设置范围是 192~432。
例如:要实现 168MHz 的主频率,通过选择 HSE 分频作为 PLL 输入的时钟信号,输入 8Mhz,8 分频,即 1MHz,通过标号③选择倍频因子,我们选择 336 倍频,这样可以得到时钟信号为 1*336=336MHz,然后经过 2 分频,得到 168MHz。
2.3 系统时钟SYSCLK--------C/D/E
STM32 的系统时钟 SYSCLK 为整个芯片提供了时序信号。我们已经大致知道 STM32 主控是时序电路链接起来的。对于相同的稳定运行的电路,时钟频率越高,指令的执行速度越快,单位时间能处理的功能越多。STM32 的系统时钟是可配置的,在 STM32F4 系列中,它可以为HSI、PLLCLK、HSE 中的一个,通过 CFGR 的位 SW[1:0]设置。
如图可知,AHB、APB1、APB2、内核时钟等时钟通过系统时钟分频
得到。
标号 ④ 是系统时钟输入源选择【外部高速时钟 HSE(8M)、内部高速时钟 HSI(16M)、经过倍频的 PLL CLK(168M)】
标号 ⑤ 是AHB 预分频器【分频系数为 1,2,4,8,16,32,64,128,256,512】
标号 ⑥ 是低速 APB1 预分频器【分频系数为 1,2,4,8,16】,片上低速的外设就挂载在该总线上,例如有看门狗定时器
、定时器 2/3/4/5/6/7
、RTC 时钟
、USART2/3/4/5
、SPI2(I2S2)
、SPI3(I2S3)
、I2C1~3
、CAN
、2 个 DAC
标号 ⑦ 是高速 APB2 预分频器【分频系数为 1,2,4,8,16】,高速总线连接的外设有定时器 1/8/9/10/11
、SPI1
、USART1
和USART6
、3 个 ADC
、SDIO 接口
标号 ⑧决定定时器时钟频率,该位由硬件自动设置【APB 预分频器为 1,定时器时钟频率等于 APB 域的频率,否则,等于 APB 域的频率的两倍】
AHB 总线时钟直接作为
GPIO(A\B\C\D\E\F\G\H\I\)
、以太网
、DCMI
、FSMC
、AHB总线
、Cortex 内核
、存储器
和DMA 的 HCLK 时钟
,并作为 Cortex 内核自由运行时钟 FCLK
标号 ⑨ 是 RTC 时钟,其时钟源有三个途径:HSE/x(x = 2~31)、LSE 或 LSI。
2.4 时钟信号输出MCO--------F
标号 ⑩ 是 MCO 时钟输出,其作用是为外部器件提供时钟。MCO1、MCO2 两个时钟输出引脚给外部器件提供时钟源(分别由 PA8 和 PC9 复用功能实现),每个引脚可以选择一个时钟源,通过 RCC 时钟配置寄存器 (RCC_CFGR)进行配置。
标号 ⑪ MCO1 和 MCO2 的预分频器,取值范围均为:1~5。
标号 ⑫ MCO1(外部器件的输出时钟 1)时钟源,MCO2(外部器件的输出时钟 2)时钟源。