34.时钟树.md 6.4 KB

时钟树

判别规则(核心,唯一要记的)

  1. 频率怎么算:沿着树一路乘除。源频率 × PLL 倍频 = SYSCLK → 走 AHB(分频)→ 再进 APB1(要再 /2,最高只有 36M)或 APB2(/1,最高 72M)
  2. 外设挂哪条:要高速的挂 APB2(72M,如 USART1、SPI1);不着急的挂 APB1(36M,省电,如 USART2/3、I2C)
  3. 五个时钟源各管一摊: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。设计目的就是省电,不是越快到越好。

配置坑(最容易死的三个)

  1. Flash 等待周期要跟着频率改:024M→0 等待 / 2448M→1 / 48~72M→2。频率上去但等待没加 → CPU 去 Flash 取指令跟不上 → 死机。改频率 = 改 Flash 等待,两件事一起做。
  2. 改 PLL 的顺序:关 PLL → 改倍频 → 改 Flash 等待 → 开 PLL 等就绪 → 切源等确认。直接切到没就绪的时钟源,系统会没时钟,直接跑飞。
  3. 外设时钟要手动开:每个外设用之前都要 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 题,全过=学会)

  1. 计算:HSE 8M、PLL ×6、AHB /1、APB1 /2、APB2 /1 → SYSCLK 48M / APB1 24M / APB2 48M,Flash 设 1 等待(24~48M 档)
  2. 陷阱题:"所有外设都用 72M 才能保证性能,应该全挂 APB2" → 。看外设实际需求:APB1 上限就 36M,且全 72M 功耗爆炸,低速外设挂 APB1 是为了省电
  3. 陷阱题:从 ×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


每主题一页,复习时只翻本目录。