STM32的时钟树

STM32 的时钟系统是一个复杂但高度可配置的架构,它的作用是为芯片的各种外设和核心模块提供稳定、合适的时钟信号。为了便于理解,我们可以想象 STM32 的时钟系统就像是一座大城市的供水系统,而时钟信号(Clock)就是水流,负责把“时间信号”输送到各个需要它的地方(CPU、外设、存储器等)。时钟树的主要组成部分包括:

1. 时钟源(自来水厂)

城市里的自来水来自不同的水厂,STM32 也有多个“水源”:

  • HSI(内部时钟) → 内置小型水厂,自带水源(通常 8MHz),虽然方便但水质(精度)一般。
  • HSE(外部晶振) → 外部大型水厂(通常 8MHz 或 16MHz),水质好,稳定,但需要额外建设(外接晶振)。
  • LSI/LSE(低速时钟) → 备用水源,比如地下水,流量小,但 RTC(实时时钟)特别需要。
  • PLL(锁相环) → 类似“增压泵站”,可以提高水压(倍频),比如 8MHz 提升到 72MHz。
在CubeMX中,可以在Clock Configuration中进行设置。

2. 时钟控制中心(总水阀)

城市的供水系统有个总控制中心,负责决定从哪个水厂取水,并调整水压。STM32 的 RCC(复位和时钟控制) 模块就相当于这个调度中心。

它决定:

  • 采用哪种水源(时钟源)
  • 是否使用增压站(PLL 倍频)
  • 如何分配水流(时钟分频)
在CubeMX中,可以在RCC选项中可以进行设置HSI/HSE的时钟源输入方式,以及查看使用外部使用所占用的GPIO口等操作。

在 STM32 中,BYPASS 模式晶振模式(Crystal Mode)主要是 HSE(High-Speed External Clock) 外部时钟源的两种不同输入方式。它们的核心区别在于是否使用外部晶振(Crystal),以及时钟信号的来源方式。

Crystal Mode(晶振模式)

  • 适用于单片机独立运行,使用普通晶振 + 负载电容。
  • 需要片内振荡器,启动时间略长,但稳定可靠。

BYPASS Mode(旁路模式)

  • 适用于从 外部设备获取时钟信号(如 GPS、TCXO、MCU、FPGA)。
  • 直接输入 方波信号HSE_INHSE_OUT 悬空。
  • 启动速度快,但受外部信号质量影响。
使用场景Crystal 模式(晶振)BYPASS 模式(旁路)
单片机独立运行✅ 适合❌ 不适合(需要外部信号)
使用普通石英晶振✅ 推荐❌ 不适合
外部时钟源(GPS、PLL、FPGA)❌ 不适合✅ 推荐
需要快速启动❌ 启动较慢✅ 直接启用,无需等待
对抖动敏感(低噪声)✅ 稳定,低抖动❌ 可能受外部时钟信号影响

3. AHB 总线(主水管)

城市的主供水管道 HCLK(AHB 总线时钟) 就像一条粗大的主水管,负责把水(时钟信号)输送到各个区域:

  • 中央处理器(CPU):居民区,主力用水户(计算任务)。
  • SRAM(存储器):学校、医院,需要稳定供水。
  • DMA(数据搬运工):工厂,需要大量稳定的水流(数据传输)。

4. APB1 / APB2 总线(支水管)

城市供水系统通常会分成高压区和低压区,STM32 的 APB1 / APB2 也是类似的:

  • APB1(PCLK1,低速水管) → 给低速外设供水,比如 USART2(串口)、I2C(传输数据)、SPI(通信)
  • APB2(PCLK2,高速水管) → 给高速外设供水,比如 USART1(高速串口)、SPI1(高速通信)、ADC(模拟信号转换)

🚰 有些高需求区域会在主供水管上加增压器,比如某些 定时器 TIMx,当 APB 分频器不等于 1 时,它们可以得到 2 倍水压(时钟频率),保证充足的供水。

5. 外设时钟(社区独立水源)

有些大企业或小区有自己的供水塔,可以独立调节水压。STM32 里一些外设有独立时钟:

  • ADC(模数转换器) 需要稳定的水压(通常用 PLL 的分频时钟)。
  • RTC(实时时钟) 需要稳定供水,所以通常用 LSE(低速外部晶振,32.768kHz),类似独立的小型水井。

6. MCO(额外水管出口)

MCO(Microcontroller Clock Output)可以理解为额外的供水接口,允许把 STM32 里的时钟信号输出给其他设备,就像提供一个公共水龙头给别人接水。


一个真实的应用场景:家庭供水 vs STM32F103

假设你家有这样一套供水系统:

  • 进水(HSE 8MHz),用增压器(PLL 9 倍)把水压提升到 72MHz
  • 主水管(AHB)直接供应 72MHz 的大水流。
  • 低速支管(APB1)分流成 36MHz,用于洗衣机(USART2)。
  • 高速支管(APB2)保持 72MHz,用于花园喷泉(USART1)。
  • 额外的地下水井(LSE 32.768kHz)提供稳定低压水给定时灌溉(RTC)。

STM32F103 的常见时钟配置就是:

  • HSE = 8MHz
  • PLL 倍频 9 倍SYSCLK = 72MHz
  • HCLK = 72MHz
  • PCLK1(APB1)= 36MHz
  • PCLK2(APB2)= 72MHz
  • LSE = 32.768kHz(用于 RTC)

7. 总结

STM32 的时钟树就像城市供水系统:

  • 不同水厂(HSI/HSE/PLL)提供水(时钟)
  • 供水调度中心(RCC)控制水流方向
  • 主水管(AHB)负责大规模供水,支水管(APB1/APB2)分流到不同外设。
  • 有些设备(ADC/RTC)有独立的供水塔,保证特殊需求。
  • 有些设备(定时器 TIMx)会加增压器(倍频),提供额外的动力。
上一篇
下一篇