时钟树
判别规则(核心,唯一要记的)
- 频率怎么算:沿着树一路乘除。
源频率 × PLL 倍频 = SYSCLK → 走 AHB(分频)→ 再进 APB1(要再 /2,最高只有 36M)或 APB2(/1,最高 72M)
- 外设挂哪条:要高速的挂 APB2(72M,如 USART1、SPI1);不着急的挂 APB1(36M,省电,如 USART2/3、I2C)
- 五个时钟源各管一摊:HSE = 主源(外部晶振,准);HSI = 后备(内部 RC,便宜但漂);PLL = 提速到 72M;LSI = 看门狗用;LSE = 只给 RTC
一句话:"时钟 = 配电房,按设备需求分配频率;算频率沿着树乘除,外设看速度需求选总线,五个源各管各的。"
抽象描述(一句话本质)
芯片里一堆设备速度要求不一样,不能全都供 72M(费电、也用不上)。所以有个"配电房"(RCC)按需分配:CPU 要 72M,APB1 外设给 36M 就够,RTC 用专门的慢钟(32.768KHz)。
五个时钟源(一张表记全)
| 源 |
频率 |
准不准 |
管什么 |
| HSI |
8M 内部 RC |
差(约 1%,随温度电压漂) |
上电先用它跑、HSE 坏了顶上来 |
| HSE |
8M 外部晶振 |
准(约 50ppm) |
系统主源首选 |
| PLL |
×9 = 72M |
— |
把频率提上去给 CPU 用 |
| LSI |
40K 内部 RC |
差 |
看门狗(IWDG)、自动唤醒 |
| LSE |
32.768K 外部晶振 |
准 |
只给 RTC 计时 |
为啥 HSE 准 HSI 差:HSE 是外面那块石英,频率靠切石头定死,稳;HSI 是芯片里电阻+电容充放电计时,RC 值受温度电压影响大,所以漂。要精确时序(USB 48M、波特率)必须靠外部晶振。
频率怎么算(背下这条路)
HSE 8M → PLL×9 → SYSCLK 72M → AHB /1 = 72M → APB1 /2 = 36M(到顶了)
└→ APB2 /1 = 72M(到顶了)
- SYSCLK = 源 × PLL 倍频
- AHB = SYSCLK ÷ AHB 分频
- APB1 = AHB ÷ 2(最高只能 36M)
- APB2 = AHB ÷ 1(最高 72M)
外设挂哪条总线
| 总线 |
最高频率 |
挂什么 |
| APB2 |
72M |
GPIO、USART1、SPI1、TIM1、ADC(高速外设) |
| APB1 |
36M |
USART2/3、I2C、SPI2/3、TIM2~7(低速省电) |
记法:USART1 要跑高速 → 挂 APB2;USART2 不着急 → 挂 APB1。设计目的就是省电,不是越快到越好。
配置坑(最容易死的三个)
- Flash 等待周期要跟着频率改:0~24M→0 等待 / 24~48M→1 / 48~72M→2。频率上去但等待没加 → CPU 去 Flash 取指令跟不上 → 死机。改频率 = 改 Flash 等待,两件事一起做。
- 改 PLL 的顺序:关 PLL → 改倍频 → 改 Flash 等待 → 开 PLL 等就绪 → 切源等确认。直接切到没就绪的时钟源,系统会没时钟,直接跑飞。
- 外设时钟要手动开:每个外设用之前都要
RCC->APBxENR 打开,不然外设没时钟不工作。
正反例(建立直觉)
- 正例1:CPU 要最快 → 挂 SYSCLK 72M(PLL ×9)
- 正例2:USART1 要高波特率 → 挂 APB2(72M)
- 反例1:把 I2C 挂 APB2 → 浪费(它本身跑不了那么快,还费电)
- 反例2:RTC 用系统时钟 → 断电就丢时间,必须用 LSE(后备域独立供电)
易混对比
HSI vs HSE
|
HSI |
HSE |
| 来源 |
芯片内部 RC |
外部石英晶振 |
| 精度 |
差(~1%,会漂) |
准(~50ppm) |
| 用途 |
上电起步、HSE 故障后备 |
系统主源、USB/波特率必须用它 |
LSI vs LSE
|
LSI |
LSE |
| 频率 |
40K |
32.768K |
| 管什么 |
看门狗、自动唤醒 |
RTC(独立后备域) |
APB1 vs APB2
|
APB1 |
APB2 |
| 最高频率 |
36M |
72M |
| 挂谁 |
低速/低功耗外设 |
高速外设 |
变体验证(3 题,全过=学会)
- 计算:HSE 8M、PLL ×6、AHB /1、APB1 /2、APB2 /1 → SYSCLK 48M / APB1 24M / APB2 48M,Flash 设 1 等待(24~48M 档)
- 陷阱题:"所有外设都用 72M 才能保证性能,应该全挂 APB2" → 错。看外设实际需求:APB1 上限就 36M,且全 72M 功耗爆炸,低速外设挂 APB1 是为了省电
- 陷阱题:从 ×9(72M)改成更高倍频后一启动就死机 → 最可能是 Flash 等待周期没跟着改(频率高了 Flash 读取跟不上);超 72M 本身也超规格
口述要点(面试怎么讲)
- 结论先行:频率沿树乘除;高速外设挂 APB2;五个源各管各的
- 为什么先 HSI 再切 PLL:外部晶振要起振时间、PLL 要锁定时间,上电瞬间它们没稳定,所以先用内部 RC 保证能跑,配好再切
- 为什么 HSE 准 HSI 差:石英靠机械尺寸定频稳,内部 RC 靠电阻电容充放电、受温度电压影响大
- 为什么改 PLL 要关了再开、等就绪再切:运行中改倍频会出毛刺;切到没就绪的源会没时钟,跑飞。就绪标志 = "新时钟稳定了"的确认
- 易错点:改倍频忘改 Flash 等待;忘开外设时钟;把 USB/RTC 的关键时钟用错源
关系网络
| 相邻概念 |
关系 |
孤立理解会犯的错 |
| NVIC/中断 |
所有外设/中断都靠时钟才工作 |
忘开外设时钟,中断永远不来 |
| DMA |
DMA 也挂在 AHB 上 |
以为 DMA 不用时钟 |
| 串口波特率 |
波特率算不准常是因为时钟源不精确 |
用内部 RC 配高波特率,误差大 |
| 低功耗 |
时钟树的存在目的就是按需供电、省电 |
以为全上 72M 最好 |
学习日期
2026-08-18
每主题一页,复习时只翻本目录。