STM32时钟
1 时钟的定义与作用
1.1 定义
时钟(Clock)是一种周期性的电信号,它像 “时间基准” 一样,协调数字电路中所有操作的时序,确保电路各部分按照统一的节奏同步工作。
时钟简单来说就是用来驱动整个芯片进行工作的,它为设备的运行提供了心跳。如果时钟速度越快,那么心跳的频率也就越快,执行指令的速度也就更快。时钟精度越高,每次心跳的间隔和周期也就更一致,出现误差的可能性就越小。
官方的说:时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,要想使用单片机的外设必须开启相应的时钟。由时钟去驱动指令的执行。
时钟一般是通过RC振荡器或者晶体振荡器、陶瓷振荡器等来提供时钟信号。
1.2 作用
对 STM32 等单片机而言,时钟是 “系统的心脏”:
决定 CPU 的运行速度(如 72MHz 主频意味着 CPU 每秒可执行约 7200 万次基本操作);
外设(GPIO、ADC、通信接口等)需依赖时钟实现特定功能(如 UART 的波特率由时钟分频计算得出);
可通过关闭无用时钟降低系统功耗(STM32 默认关闭未使用外设的时钟,减少无效能耗)。
2 时钟树
2.1 什么是时钟树

在 STM32 中,时钟树是描述时钟信号从原始时钟源(如 HSI、HSE 等)经过分频、倍频、选择等处理后,最终分配到 CPU、外设、总线等各个模块的完整路径和逻辑关系的结构,可理解为 “时钟的传输与分配网络”。
其核心作用是:
将不同来源、不同频率的时钟源,通过 PLL(锁相环,用于倍频)、分频器(用于降频)、多路选择器(用于切换时钟源)等组件,转化为各模块所需的特定频率时钟;
清晰展示时钟信号的流向(如从 HSE→PLL→SYSCLK→AHB→APB 外设),以及各节点的配置方式(如分频系数、使能控制)。
简单来说,时钟树就像一张 “时钟路线图”,直观呈现了 STM32 中所有时钟的产生、处理和分配逻辑,是配置时钟系统的核心依据。
2.2 时钟树的组成
时钟源
STM32的时钟源包括内部时钟和外部时钟。
内部时钟:
·HSI(高速内部时钟)
HSI 时钟信号由内部 8MHZ 的 RC 振荡器产生,它可以直接作为系统时钟或者在 2 分频后作为 PLL 输入。
HSI RC 振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时 间比 HSE 晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。
特点:无需外部晶振,上电即自动启动,启动速度快。精度较低(受温度和电压影响,误差约 ±1%~±2%),但足够满足多数对时钟精度要求不高的场景。
用途:系统启动时的默认时钟源(如复位后首先使用 HSI)。作为 PLL(锁相环)的输入源,经倍频后作为系统主时钟。在低功耗或对成本敏感的场景中直接使用(无需外部晶振,降低 BOM 成本)。
·LSI(低速内部时钟)
LSI RC 担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为 独立看门狗和自动唤醒单元提供时钟。LSI 时钟频率大约 40kHz(在 30kHz 和
60kHz 之间)
LSI RC 可以通过控制/状态寄存器(RCC_CSR)里的 LSION 位来启动或关闭。
在控制/状态寄存器(RCC_CSR)里的 LSIRDY 位指示低速内部振荡器是否稳定。
在启动阶段,直到这个位被硬件设置为 1 后,此时钟才被释放。如果在时钟中断 寄存器(RCC_CIR)里被允许,将产生 LSI 中断申请。
特点:精度低(误差较大,约 ±50%),但功耗极低(仅数 μA 级别)。
始终保持运行状态,即使系统进入停机或待机模式也不会停止。
用途:为独立看门狗(IWDG)提供时钟,确保系统在异常时能可靠复位(因 LSI 独立于主时钟,即使主时钟故障仍能工作)。作为实时时钟(RTC)的备用时钟源(当 LSE 不可用时)。
外部时钟
·HSE(高速外部时钟)
频率范围:通常为 4MHz~26MHz(常见值为 8MHz、12MHz、16MHz、25MHz 等),具体取决于芯片型号和外部晶振选型。
高速外部时钟信号(HSE)由以下两种时钟源产生: HSE 外部晶体/陶瓷谐振器 , HSE 用户外部时钟 。
为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必 须尽可能地靠近振荡器管脚。负载电容值必须根据所选择的振荡器来调整。
接入方式:
晶振模式:外接晶体振荡器(如 8MHz 晶振 + 22pF 负载电容),芯片内部提供振荡电路。
时钟模式:直接接入外部时钟信号(如其他设备输出的方波)。
特点:
精度高(晶振误差通常在 ±20ppm~±50ppm,远优于 HSI),稳定性好(受环境影响小)。
启动时间较长(约 4ms),需等待晶振起振并稳定。
用途:
作为系统主时钟的首选输入源(如通过 PLL 将 8MHz HSE 倍频至 72MHz 作为 SYSCLK)。
用于对时钟精度要求高的场景,如通信接口(UART、SPI 等)、ADC 采样、定时器精确计时等。

·LSE低速外部时钟
频率:固定为 32.768kHz(标准实时时钟晶振频率,因 2¹⁵=32768,便于分频产生 1 秒基准信号)。
特点:
精度极高(误差通常在 ±5ppm 以内),适合长时间精确计时。
功耗极低(约 1μA),即使系统断电(通过备用电池供电)仍能维持运行。
用途:
专门为实时时钟(RTC)提供时钟源,实现日历功能(年、月、日、时、分、秒)。
在低功耗模式下作为唯一运行的时钟,维持系统计时(如 STM32 的待机模式)。
PPL锁相环
PLL(锁相环,Phase-Locked Loop) 是一种能自动跟踪输入信号相位的闭环控制电路,其核心功能是将输入时钟信号倍频或分频为更高或更低频率的稳定输出,广泛用于频率合成、时钟同步和信号处理。
在 STM32 中,PLL 是时钟系统的核心组件,主要用于:
提升系统主频
示例:将 8MHz 的 HSE 时钟通过 PLL×9 倍频,得到 72MHz 的系统主时钟(SYSCLK)。
优势:在不依赖高频晶振的前提下,大幅提高 CPU 和外设的运行速度。
为不同外设提供特定频率
例如 STM32F103 的 USB 接口需 48MHz 时钟,可通过 PLL 分频得到(如 72MHz→48MHz)。
降低功耗
在低功耗场景下,可通过配置 PLL 降低系统主频,减少能耗。
SYSCLK
SYSCLK(System Clock,系统时钟) 是整个单片机系统的主时钟信号,最大频率为72MHZ,是 CPU、内存以及多数核心模块(如总线、中断控制器等)运行的基准时钟,其频率直接决定了 STM32 的核心运行速度。
SYSCLK 的时钟信号只能从以下 3 个来源中选择(通过寄存器配置切换):
HSI(高速内部时钟):
直接使用 HSI(如 8MHz)作为 SYSCLK,无需外部元件,适合快速启动或低精度场景(但频率较低,性能有限)。
HSE(高速外部时钟):
直接使用 HSE(如 8MHz 晶振)作为 SYSCLK,精度高但频率受限于外部晶振(通常不单独用,因频率不够高)。
PLL 输出(最常用):
通过 PLL 对 HSI 或 HSE 进行倍频后输出(如 8MHz HSE 经 PLL×9 倍频得到 72MHz),作为 SYSCLK。这是绝大多数场景的选择 —— 既利用 PLL 提升频率(满足高性能需求),又借助 HSE 的稳定性保证时钟精度。

SYSCLK 生成后,会通过分频器分配给下游的总线和模块,形成不同的子时钟:
HCLK(AHB 总线时钟):
由 SYSCLK 经 AHB 分频器得到(通常 1 分频,即 HCLK = SYSCLK),驱动 AHB 总线及挂载的模块(如 CPU、SRAM、DMA 等)。CPU 的运行频率等于 HCLK,因此 HCLK 直接决定 CPU 的指令执行速度。
PCLK1(APB1 总线时钟):
由 HCLK 经 APB1 分频器得到(如 2 分频,72MHz→36MHz),驱动低速外设(如 UART2、I2C、SPI2 等),最高频率受限于外设硬件(F1 系列 APB1 最高 36MHz)。
PCLK2(APB2 总线时钟):
由 HCLK 经 APB2 分频器得到(如 1 分频,72MHz→72MHz),驱动高速外设(如 GPIO、UART1、SPI1、ADC 等),频率可与 SYSCLK 相同(满足高速需求)。

AHB和HCLK
在 STM32 中,AHB(Advanced High-performance Bus) 和 HCLK(AHB 总线时钟) 是紧密相关的两个概念,分别代表总线架构和该总线的时钟信号,共同构成了高速数据传输的基础。
AHB总线
AHB 是 ARM Cortex-M 系列(如 STM32)采用的高性能总线,属于 AMBA(Advanced Microcontroller Bus Architecture)总线规范的一部分,专门设计用于高速数据传输。连接 CPU、内存(SRAM/Flash)、DMA 控制器、高速外设(如 GPIO、ADC)等关键模块,实现它们之间的高速数据交换。支持突发传输(Burst Transfer)、多主设备(Multi-Master)和流水线操作,大幅提升数据吞吐量。
HCLK
HCLK 是 AHB 总线的工作时钟,直接决定 AHB 总线上数据传输的速度。它由 SYSCLK(系统时钟)通过分频器生成,通常与 SYSCLK 频率相同来源:HCLK 由 SYSCLK 经 AHB 预分频器(RCC_CFGR 寄存器中的 HPRE 位)分频得到。
多数场景下,HPRE 设为 1 分频(即不分频),此时 HCLK = SYSCLK。特殊场景下(如低功耗),可将 HCLK 设为 SYSCLK 的 1/2、1/4 等(如 HPRE=2 分频时,HCLK = SYSCLK/2)。
AHB 总线是物理传输通道,而HCLK是驱动该通道工作的 “节拍”。HCLK 如同 “高速公路的限速”,AHB 如同 “高速公路本身”,两者共同决定了数据传输的效率。

APB和PCLK
STM32 中还有低速的APB(Advanced Peripheral Bus)总线,分为 APB(低速)和 APB2(高速),由 PCLK1 和 PCLK2 时钟驱动。APB(Advanced Peripheral Bus) 和 PCLK(Peripheral Clock) 是与外设通信密切相关的概念,分别代表总线架构和总线时钟。它们共同构成了中低速外设(如 UART、SPI、I2C 等)的通信基础。
APB总线有以下特点:
低功耗设计,通过降低总线频率减少功耗,适合对速度要求不高的外设。简化架构,相比 AHB 总线,APB 减少了复杂的控制信号(如无突发传输、流水线),降低硬件成本。
PCLK 是 APB 总线的工作时钟,直接决定 APB 总线上外设的运行速度。它由 SYSCLK(系统时钟)通过分频器生成,分为两种:
PCLK1:驱动 APB1 总线,频率通常为 SYSCLK 的 1/2(如 SYSCLK=72MHz 时,PCLK1=36MHz)。
PCLK2:驱动 APB2 总线,频率通常与 SYSCLK 相同(如 SYSCLK=72MHz 时,PCLK2=72MHz)。
|
总线 |
时钟 |
典型频率 |
连接的外设 |
|
AHB |
HCLK |
最高 72MHz |
CPU、SRAM、DMA、高速外设 |
|
APB1 |
PCLK1 |
最高 36MHz |
UART2/3、SPI2、I2C、低速定时器 |
|
APB2 |
PCLK2 |
最高 72MHz |
UART1、SPI1、ADC、GPIO |
总的来说就是APB1主要连接低速外设APB2主要连接高速外设。APB1上的时钟为PCLK1,APB2上的时钟为PCLK2。
3 总结
STM32的时钟首先来自于时钟源,其中HSI、HSE、MSI这些高速时钟一般是用于系统时钟(SYSCLK)的,LSI和LSE是用于低速外设的。然后SYSCLK 分频后得到 HCLK, HCLK分频后得到PCLK1和PCLK2。
对于整个系统来说,之所以产生如此之多的时钟,是为了适配不同工作速率的硬件,以此来提高资源利用率。

773

被折叠的 条评论
为什么被折叠?



