当前位置: 首页 > news >正文

STM32的时钟系统与时钟树的配置

STM32的时钟系统是其微控制器(MCU)的核心组成部分,负责为CPU、外设和存储器等模块提供精确的时序信号。其设计灵活且复杂,通过多级时钟树(Clock Tree)实现时钟源的选择、分频和分配。以下是详细介绍:

一、STM32时钟系统的核心概念

  1. 时钟源(Clock Source)
    STM32提供多种时钟源,通常包括:
    • HSI(High-Speed Internal Oscillator):内部高速RC振荡器,频率通常为8MHz(部分型号为16MHz),启动快但精度低(±1%~2%)。
    • HSE(High-Speed External Oscillator):外部高速晶振,频率范围广(4~26MHz,部分型号支持更高),精度高(±0.1%~0.01%)。
    • LSI(Low-Speed Internal Oscillator):内部低速RC振荡器,频率约32kHz,用于独立看门狗(IWDG)或RTC备用时钟。
    • LSE(Low-Speed External Oscillator):外部低速晶振,频率通常为32.768kHz,专为RTC(实时时钟)设计,精度高。
    • PLL(Phase-Locked Loop):锁相环,可将输入时钟倍频(如将HSE的8MHz倍频至72MHz),提供更高频率的主时钟。
  2. 时钟树(Clock Tree)
    STM32的时钟信号通过多级分频和选择器分配到不同模块,形成树状结构。时钟树的主要功能包括:
    • 时钟源选择:通过寄存器配置选择HSI、HSE或PLL作为系统时钟。
    • 分频控制:对时钟信号进行预分频(Prescaler),以适应不同外设的频率需求。
    • 时钟分配:将分频后的时钟分配到CPU、APB总线、外设等模块。

二、STM32时钟树的关键路径

以STM32F1系列为例,时钟树的主要路径如下:

  1. 系统时钟(SYSCLK)
    • 来源:HSI、HSE或PLL。
    • 作用:为CPU核心、AHB总线(高速总线)和内存提供时钟。
    • 配置:通过RCC_CFGR寄存器的SW位选择时钟源。
  2. AHB总线时钟(HCLK)
    • 来源:SYSCLK经过AHB预分频器(AHB Prescaler)分频。
    • 作用:驱动AHB总线上的外设(如DMA、GPIO)和APB预分频器。
    • 分频系数:通过RCC_CFGR寄存器的HPRE位配置(1~512分频)。
  3. APB总线时钟(PCLK1/PCLK2)
    • 来源:HCLK经过APB预分频器分频。
    • 作用
      • PCLK1:驱动低速外设(如USART2、TIM2~TIM7)。
      • PCLK2:驱动高速外设(如USART1、TIM1、ADC)。
    • 分频系数:通过RCC_CFGR寄存器的PPRE1PPRE2位配置(1~16分频)。
  4. 外设时钟
    • 每个外设通过独立的时钟使能位(如RCC_APB2ENR中的USART1EN)控制是否启用时钟。
    • 外设实际工作频率可能经过二次分频(如USART的波特率分频)。
  5. PLL时钟
    • 输入源:HSI/2或HSE(可配置是否经过分频)。
    • 倍频系数:通过RCC_CFGR寄存器的PLLMUL位配置(2~16倍频)。
    • 输出:PLLCLK可作为SYSCLK或USB、RTC等专用时钟源。

三、先把“时钟”想象成“城市供水系统”

  • 水源(振荡器) → 水库/水井

  • 水管网(时钟树) → 主管→支管→入户

  • 水表(预分频器) → 控制每户水压

  • 用水设备(CPU、外设) → 厨房、浴室、花园……

STM32 的时钟树就是一套多级“供水系统”:
先选水源 → 经过开关/阀门(Mux) → 加压站(PLL) → 各级减压阀(Prescaler) → 最终送到每家每户。


四、图片里出现的“水源”逐个讲解

名字频率类型作用比喻
HSI RC8 MHz内部 RC 振荡器上电默认水源,省晶振自家院子里的手压井
HSE4-16 MHz(常用 8 MHz)外部晶振/时钟精度高,可倍频到 72 MHz城市自来水厂
LSI RC40 kHz低速内部 RC独立看门狗 IWDG、RTC 低功耗计时备用小水桶
LSE32.768 kHz32.768 kHz 外部晶振RTC 精准日历时钟标准石英钟
PLLCLK≤72 MHzPLL 倍频输出把 HSI/HSE 放大,给 CPU 和高速外设加压泵站

五、时钟树的流向(对照图片箭头)

  1. SYSCLK(总水源)
    HSI / HSE / PLLCLK 三选一决定,最大 72 MHz。
    图中“SYSCLK (MHz)”就是最终给 CPU 喝的“主水管”。

  2. HCLK(主管道)
    SYSCLK → AHB Prescaler(1、2、4…512 分频)→ HCLK
    给 AHB 总线、CPU 核心、内存、DMA 使用。
    图中“HCLK (MHz)”就是这条主管的水压。

  3. PCLK1 / PCLK2(两条支管)

    • HCLK → APB1 PrescalerPCLK1(≤36 MHz)
      挂在 APB1 的外设:USART2/3、I²C1/2、SPI2、TIM2~4…

    • HCLK → APB2 PrescalerPCLK2(≤72 MHz)
      挂在 APB2 的外设:GPIO、USART1、SPI1、TIM1、ADC1/2…
      图中 APB1、APB2 后面分别标注了“8 MHz、72 MHz max”。

  4. 专用小水管

    • ADC 时钟:PCLK2 → ADC Prescaler(2/4/6/8)→ 4~18 MHz

    • USB 时钟:PLL 直接 48 MHz 分支(图上 USB (MHz) 48)

    • RTC 时钟:LSE(32.768 kHz) / LSI(40 kHz) / HSE/128 三选一,图上“RTC Clock Mux”

    • 独立看门狗 IWDG:固定 LSI 40 kHz

    • SysTick:可以走 HCLK 或 HCLK/8,给操作系统节拍用。


六、把数字换成“水压值”(一个常见配置举例)

节点实际计算结果
HSE8 MHz 晶振8 MHz
PLL8 MHz × 972 MHz
SYSCLK选 PLL72 MHz
HCLKAHB 不分频72 MHz
PCLK172 / 236 MHz(APB1 最大)
PCLK272 / 172 MHz(APB2 最大)
ADC72 / 612 MHz
USBPLL / 1.548 MHz(固定)
RTC选 LSE32.768 kHz

文章转载自:

http://HHENdpar.dnmzL.cn
http://Nzor0QDB.dnmzL.cn
http://0Is4GDuk.dnmzL.cn
http://2DoAda40.dnmzL.cn
http://5iZwCP0K.dnmzL.cn
http://9IMEneja.dnmzL.cn
http://WzNvSzSm.dnmzL.cn
http://UW1DJfdb.dnmzL.cn
http://oOieq5wK.dnmzL.cn
http://VrsPAV41.dnmzL.cn
http://6tv4bCcZ.dnmzL.cn
http://sTyrESLT.dnmzL.cn
http://VcNzYWwT.dnmzL.cn
http://49j7UfVo.dnmzL.cn
http://yhPKHCZV.dnmzL.cn
http://bF9J45Wz.dnmzL.cn
http://DjfjEE51.dnmzL.cn
http://OkTyjHL2.dnmzL.cn
http://GxrDXn5X.dnmzL.cn
http://hnsLsjF6.dnmzL.cn
http://o5sP38Rl.dnmzL.cn
http://mfAHtYwg.dnmzL.cn
http://AcCkzhnj.dnmzL.cn
http://PvCgW9YP.dnmzL.cn
http://k1bEcwyE.dnmzL.cn
http://VxfdOzbB.dnmzL.cn
http://uIMEMUZc.dnmzL.cn
http://kcwfB3Kv.dnmzL.cn
http://K72txh2B.dnmzL.cn
http://XTDisvx0.dnmzL.cn
http://www.dtcms.com/a/365443.html

相关文章:

  • pip的缓存
  • 嵌入式人别再瞎折腾了!这8个开源项目,解决按键/队列/物联网所有痛点,小白也能抄作业
  • 【Rhino】【Python】将开放曲面转换为边界线和填充
  • Kotlin编程学习记录2
  • H3C UIS Cell 3020 G3服务器更换raid卡安装ONEStor记录
  • Python - Union联合类型注解
  • 数据库函数详解:COALESCE 到底有什么用?
  • 微硕WINSOK超低阻抗MOS管 WSD30100DN56在汽车高性能系统中的应用
  • Ubuntu22.04中使用cmake安装abseil-cpp库
  • oracle 从一张表更新到另外一张表的方法(MERGE)
  • java面试:可以讲解一下mysql的索引吗
  • 部署MYSQL主从同步超详细过程
  • Kafka面试精讲 Day 6:Kafka日志存储结构与索引机制
  • 【stm32】定时器中断与定时器外部时钟
  • RTSP流端口占用详解:TCP模式与UDP模式的对比
  • 首届中国AI项目管理大会成功召开圆满闭幕!
  • 【BigWorld 游戏服务器引擎】数据落地方案自动化详解,及Java实现方案的探索
  • 关于ES中文分词器analysis-ik快速安装
  • 理解用户需求
  • word删除指定页面
  • Django get_or_create 方法详解
  • AP5414:高效灵活的LED驱动解决方案,点亮创意生活
  • LangGraph MCP智能体开发
  • Docker学习笔记(一):容器基础、生态与安装实践
  • XSENS VISION NAVIGATOR助力智能城市自动化清洁机器人精确导航
  • 深度学习三大框架对比评测:PaddlePaddle、PyTorch 与 TensorFlow
  • 【2025ICCV】基于 ​CL-Splats​ 的3D高斯溅射模型
  • 第二家公司虽然用PowerBI ,可能更适合用以前的QuickBI
  • TypeScript 与 Java 重载机制对比
  • WebAppClassLoader(Tomcat)和 LaunchedURLClassLoader(Spring Boot)类加载器详解