【STM32】RCC与时钟树 深度详解


STM32F1 RCC与时钟树 深度详解

一、时钟核心基础

1.1 时钟的本质:数字电路的心跳

数字电路的所有状态翻转都由时钟边沿触发,没有时钟,所有寄存器、触发器都保持状态不变,电路"冻结"。

  • CPU的指令流水线:取指→译码→执行,每一步都在时钟上升沿推进
  • 外设寄存器的读写:只有时钟驱动下,寄存器才能响应总线的读写请求
  • 串口、SPI等通信外设:波特率、通信时序都基于外设时钟分频得到

核心结论:

时钟是所有数字电路的动力源,时钟不开启,外设就是一块死电路,寄存器完全不可访问。 这就是"操作外设必先开时钟"的硬件根源。


1.2 四大硬件时钟源 全参数对比

STM32F1集成4个独立硬件时钟源,分高速/低速、内部/外部,覆盖不同精度、功耗、成本场景。

时钟源 全称 位置 典型频率 精度 温漂 核心用途 上电默认
HSI 内部高速RC振荡器 芯片内部 8MHz ±1%(常温) 大,随温度变化明显 上电默认时钟、低成本系统、PLL备用输入 ✅ 默认开启
HSE 外部高速晶振/振荡器 芯片外部 4~16MHz(常用8MHz) 极高,±20ppm以内 极小 高精度主系统时钟、PLL输入、通信外设 ❌ 默认关闭
LSI 内部低速RC振荡器 芯片内部 30~60kHz(典型40kHz) 很差,±30%以上 极大 独立看门狗时钟、低功耗唤醒、低成本RTC ❌ 默认关闭
LSE 外部低速晶振 芯片外部 32.768kHz 极高 极小 RTC实时时钟、低功耗计时、秒级基准 ❌ 默认关闭
关键细节补充
  1. 为什么LSE是32.768kHz? 32768 = 2^15,经过15次二分频后正好得到1Hz的秒基准信号,是实时时钟的标准频率,计时精准。
  2. HSE的两种类型
    • 无源晶振(Crystal):需要芯片内部振荡器配合,成本低,最常用
    • 有源晶振(Oscillator):自带振荡电路,直接输出方波,精度高、成本高,用于工业级产品
  3. HSI的局限 内部RC振荡器受温度、电压影响大,温度变化时频率漂移明显,不适合做串口、CAN等高精度通信的主时钟。

1.3 倍频与分频:时钟频率的变换

1.3.1 为什么需要倍频(PLL)
  • 高频晶振成本高、起振难、电磁干扰大
  • 低频晶振+倍频电路,成本低、稳定性好,还可以灵活配置主频
  • STM32F1最高主频72MHz,就是通过PLL倍频得到的

1.3.2 PLL锁相环的硬件原理

PLL(Phase Locked Loop,锁相环)是一个硬件反馈控制系统,把低频输入时钟倍频到高频输出。 内部四个核心模块:

  1. 鉴相器(PD):比较输入时钟和反馈时钟的相位差
  2. 环路滤波器(LPF):滤波得到平滑的控制电压
  3. 压控振荡器(VCO):根据控制电压改变输出频率
  4. 反馈分频器:把输出时钟分频后送回鉴相器

锁相过程:

输出频率 = 输入频率 × 倍频系数

反馈分频器把输出分频到和输入同频,鉴相器比较相位,不断调整VCO,直到相位差恒定,此时频率锁定,输出稳定的高频时钟。

特点:

锁定后输出频率精准跟随输入频率,精度和输入时钟源一致;

锁定需要时间,配置后要等待PLLRDY就绪位。


1.3.3 分频:分级适配不同总线

高频时钟成本高、功耗大,不是所有外设都需要最高速。

通过分级分频,给不同速度的外设提供匹配的时钟,平衡性能与功耗。

STM32的分频层级:

  1. AHB预分频:系统时钟分频得到AHB总线时钟
  2. APB1/APB2预分频:AHB时钟分频得到两条外设总线时钟
  3. 外设内部分频:每个外设自己还有分频器,比如ADC、定时器、串口波特率分频

1.4 时钟门控:低功耗的核心

每一个外设的时钟输入前都有一个独立的开关(时钟门控),由RCC寄存器控制。

  • 时钟开启:时钟信号通到外设,外设正常工作,可读写寄存器
  • 时钟关闭:时钟被截断,外设电路停止翻转,功耗接近0,寄存器不可访问
设计意义

单片机绝大多数外设不是全程工作,不用时关掉时钟,可以大幅降低芯片整体功耗。

代价:

操作外设前必须先打开对应时钟,否则配置无效。这是STM32新手最高频的坑。


二、时钟树完整结构 逐段拆解

STM32F1的时钟树是一个从左到右的单向树状结构:时钟源 → PLL倍频 → 系统时钟选择 → AHB总线分频 → APB1/APB2外设分频 → 各个外设。

2.1 第一部分:时钟源与PLL倍频(左半段)

复制代码
┌─────────┐
│ HSI 8MHz ├───────────────────┐
└─────────┘                   │
                              ├──────────┐
┌─────────┐                   │          │
│ HSE 8MHz ├───────────┐       │          ▼
└─────────┘           │       │     ┌───────────┐
                      ▼       │     │ PLL锁相环 │
                ┌───────────┐ │     └─────┬─────┘
                │ /2 分频器 │ │           │
                └─────┬─────┘ │           │
                      │       │           │
                      └───────┘           │
                        ▲                 │
                        │ PLLSRC选择器    │
                        └─────────────────┘
                              │
                              ▼
                        ┌───────────┐
                        │ SYSCLK选择器 ├──► 系统时钟SYSCLK
                        └───────────┘
                              ▲
                              │
                        HSE、HSI直连可选
逐节点详解
  1. PLL输入源选择(PLLSRC)
    • 可选:HSI二分频(4MHz)、HSE不分频
    • 寄存器位:RCC_CFGR的PLLSRC位
    • 注意:PLL配置必须在关闭PLL的状态下修改,锁定后不能改参数
  2. PLL倍频系数(PLLMUL)
    • 可选:2~16倍
    • 限制:PLL输出最高不超过72MHz
    • 常用组合:8MHz HSE × 9倍 = 72MHz(标准主频)
  3. 系统时钟源选择(SW)
    • 三个可选:HSI、HSE、PLLCLK
    • 上电默认:HSI
    • 切换流程:先开启目标时钟→等待就绪→切换时钟源→等待切换完成
    • 状态位:SWS位,用来读取当前实际使用的时钟源

2.2 第二部分:总线分频与外设时钟(右半段)

复制代码
          SYSCLK 72MHz
              │
              ▼
        ┌───────────┐
        │ AHB预分频器│  可选1/2/4/8/16/64/128/256/512
        └─────┬─────┘
              │  HCLK 72MHz(默认不分频)
              │
    ┌─────────┴──────────┐
    │                    │
    ▼                    ▼
AHB外设             ┌───────────┐
DMA、CRC等          │ APB预分频器│
                   └─────┬─────┘
                         │
          ┌──────────────┴──────────────┐
          │                             │
          ▼                             ▼
    ┌─────────┐                   ┌─────────┐
    │ APB2桥  │                   │ APB1桥  │
    │ 1分频   │                   │ 2分频   │
    └────┬────┘                   └────┬────┘
         │ PCLK2 72MHz                 │ PCLK1 36MHz
         │                             │
    APB2高速外设                    APB1低速外设
    GPIOA~GPIOG                     USART2/3
    USART1                          SPI2
    SPI1                            I2C1/2
    ADC1/2                          TIM2~TIM7
    AFIO、EXTI                      看门狗、BKP
关键细节补充
  1. AHB预分频器(HPRE)

    • 分频系数:1、2、4、8、16、64、128、256、512
    • 默认值:1分频,HCLK = SYSCLK
    • 挂载:内核、SRAM、Flash、DMA、RCC等核心高速模块都运行在HCLK下
  2. APB2高速外设总线(PCLK2)

    • 预分频系数(PPRE2):1、2、4、8、16
    • 默认1分频,PCLK2 = HCLK = 72MHz
    • 所有GPIO端口全部挂载在APB2上,所以GPIO的最高工作时钟是72MHz
  3. APB1低速外设总线(PCLK1)

    • 预分频系数(PPRE1):1、2、4、8、16
    • 最大分频限制:最高2分频,PCLK1最大36MHz
    • 挂载低速外设,降低功耗和设计难度
  4. 定时器时钟的特殊倍频(高频考点) APB总线上的定时器外设,有独立的时钟倍频器:

    • 如果APB预分频系数 = 1:定时器时钟 = PCLKx
    • 如果APB预分频系数 > 1:定时器时钟 = PCLKx × 2

    所以标准配置下:

    • APB2的TIM1:PCLK2=72MHz,1分频 → 定时器时钟72MHz
    • APB1的TIM2~7:PCLK1=36MHz,2分频 → 定时器时钟72MHz

    结论:STM32F1所有通用定时器的时钟都是72MHz,和APB1/APB2无关。这是面试高频坑点。

  5. ADC时钟的特殊分频 ADC对时钟上限有要求,F1的ADC最大工作时钟14MHz。

    • ADC时钟来自PCLK2分频,可选2/4/6/8分频
    • 72MHz PCLK2 ÷ 6分频 = 12MHz,是常用配置
    • 超过14MHz会导致ADC采样精度下降

三、时钟树与总线、外设的深度打通

3.1.1 总线的理解

总线是芯片内部CPU、存储器、外设之间传输地址、数据、控制信号的公共硬件通路,不是单纯的几根导线,是一套完整的硬件协议与路由体系。

STM32F1内部分为三类总线:AHB、APB1、APB2。

  1. AHB(高级高性能总线):主高速主干总线,内核、Flash、SRAM、DMA挂载在此,带宽高,负责高速数据交互。AHB通过总线桥向下扩展出APB1、APB2两条外设总线。
  2. APB2(高级外设总线2):高速外设总线,挂载GPIO、ADC、SPI1、USART1等高速外设。
  3. APB1(高级外设总线1):低速外设总线,挂载I2C、SPI2、普通串口、通用定时器等低速外设。

关键要点:

  • 每一条总线都绑定专属时钟域:AHB对应HCLK,APB2对应PCLK2,APB1对应PCLK1;总线的数据采样、信号同步完全依赖对应总线时钟。
  • 总线桥作用:完成AHB与APB之间的协议转换 + 时钟域隔离,实现高速主干和低速外设互通。
  • 外设挂载位置固定:硬件设计时就把外设固定挂在某一条总线上,软件无法修改。

3.1.2 外设寄存器

外设寄存器是外设内部的一组32位硬件存储单元,CPU通过统一编址,像访问内存一样读写寄存器,以此控制外设行为。

  1. **地址映射:**每一个外设的寄存器都分配固定的物理地址,例如GPIOA基地址0x40010800,每个寄存器对应固定偏移。C语言通过结构体指针映射,直接操作硬件地址。
  2. **__IO:**volatile,告诉编译器不要优化,每次读写都必须访问真实硬件寄存器,不能缓存到CPU寄存器。
  3. 寄存器和时钟强绑定
    • 外设没有时钟:内部触发器停止翻转,寄存器无法正常读写,写操作无效,读出来是无效值。
    • 外设开启时钟:寄存器才可以被总线正常读写。
    • 误区:寄存器地址一直存在,地址译码可以找到外设,但没有时钟,硬件不会响应读写。
  4. 寄存器分类
  • 控制寄存器:写配置,配置外设工作模式(CRL/CRH)
  • 数据寄存器:存放输入输出数据(IDR、ODR)
  • 状态寄存器:只读,反馈外设硬件状态

3.1.3 结合时钟树与总线设备

把时钟树、总线、外设三者做串联:时钟树提供各个总线的时钟频率,总线提供数据通路,外设挂载在总线上,同时接收这条总线的时钟信号。

完整信号流向

  1. 时钟树输出不同频率的时钟给到每一条总线;总线桥不仅转发数据,还把对应总线时钟送给挂载在这条总线上的全部外设。
  2. 每个外设的时钟门控开关(RCC的ENR寄存器),控制时钟信号能不能送到外设内部电路。
  3. **外设想要正常工作,两个条件必须同时满足:**① CPU可以通过总线访问该外设寄存器地址(地址通路) ② RCC开启该外设时钟,时钟信号送入外设内部(动力来源)

举例子GPIOA:

  • 地址:0x40010800,属于APB2地址段,AHB‑APB2桥把CPU指令转发到APB2总线。
  • 时钟:必须开启RCC->APB2ENR对应位,PCLK2时钟送入GPIOA。
  • 两个条件全部满足,才可以读写GPIOA的CRL、BSRR寄存器。

典型故障现象

只写寄存器,忘记开时钟:

程序编译正常,地址正确,但是寄存器写入无效,外设完全没有反应。


3.1.4 CPU操作片上外设的过程


GPIOA->BSRR |= (1<<0); 把PA0引脚置高,完整拆解CPU从执行指令到引脚电平变化的全过程。

  1. CPU内核执行指令 CPU在HCLK(AHB时钟)节拍下,从Flash取指、译码。识别出:要向物理地址0x40010810写入数据0x00000001。把地址、数据、写控制信号发送到AHB总线矩阵。
  2. AHB总线矩阵地址译码 硬件识别地址区间0x4001 0000 ~ 0x4001 FFFF属于APB2外设,将访问请求转发给 AHB‑APB2总线桥。
  3. AHB‑APB2桥做协议与时序转换 把AHB总线协议转换为APB总线协议,完成时钟域同步,访问请求交给APB2总线。
  4. APB2总线二次地址译码 + 时钟门控校验
  • APB2总线上译码器根据偏移,选中GPIOA外设。
  • 硬件检查RCC_APB2ENR中GPIOA时钟使能位:
    • ✅时钟开启:PCLK2时钟接入GPIOA外设内部,允许总线读写寄存器
    • ❌时钟关闭:外设电路冻结,直接忽略本次写请求,操作失效。
  1. 写入外设寄存器 数据写入BSRR寄存器硬件单元。BSRR是只写寄存器,硬件自动更新输出寄存器ODR。
  2. 外设硬件电路生效 ODR输出电平送到GPIO输出驱动电路,MOS管导通,PA0引脚输出高电平,外部LED点亮。

读外设流程反向:

引脚电平经过施密特触发器送入IDR寄存器,经过APB2桥、AHB总线,数据返回CPU内核。

核心总结

CPU操作外设,不是简单内存赋值,是一整套硬件流水线:内核 → AHB总线 → 总线桥 → APB总线 → 地址译码 → 时钟门控校验 → 寄存器更新 → 外设硬件动作。


配套面试题

  1. 为什么外设寄存器有地址,但不开时钟就无法操作?

    地址只是访问通路,时钟是外设的工作节拍**。地址译码可以找到外设,但没有时钟,外设内部硬件电路停止工作,无法响应总线读写,写入无效。**

  2. AHB‑APB桥的两个核心功能是什么?

    ①总线协议转换,AHB协议转为APB协议;

    ②时钟域隔离,对接AHB时钟域与APB时钟域。

  3. CPU写GPIO寄存器,完整硬件过程是什么?

    CPU发出读写请求→AHB总线矩阵译码→转发到AHB‑APB桥→协议转换进入APB总线→二次译码选中外设;校验外设时钟是否开启;时钟正常则写入寄存器;外设硬件根据寄存器完成引脚动作。

  4. __IO(volatile)作用是什么?

    防止编译器优化,强制每次代码读写都访问真实硬件寄存器,而不是使用CPU内部寄存器缓存的值。


3.2 CPU操作外设的完整时钟流程

以配置GPIOA引脚为例,从代码执行到硬件生效的完整链路:

  1. 时钟使能:CPU执行RCC->APB2ENR |= (1<<2),通过AHB总线写入RCC寄存器
  2. 时钟门控打开:硬件打开GPIOA端口的时钟开关,PCLK2时钟进入GPIOA外设
  3. 时钟稳定:外设内部电路起振,进入工作状态
  4. 寄存器配置:CPU通过总线发送地址和数据,写入GPIO的CRL配置寄存器
  5. 硬件生效:GPIO内部电路根据寄存器值配置引脚模式,引脚进入对应工作状态

注意:

开启外设时钟后不需要额外延时,硬件几乎瞬间就绪;但切换主时钟、开启PLL时,必须等待就绪位。


3.3 低速外设时钟:RTC与独立看门狗

RTC时钟源

三个可选,独立于系统时钟:

  • LSE外部低速晶振:精度最高,首选
  • LSI内部低速RC:低成本,精度差
  • HSE高速时钟128分频:不用额外晶振
独立看门狗时钟

只能用LSI内部低速时钟,设计目的:即使主时钟失效,看门狗仍然能工作,保证系统可靠性。


四、RCC寄存器

4.1 RCC核心概念

两大职责

  • 🕒时钟管理:管理HSI/HSE/LSI/LSE、PLL锁相环、系统时钟SYSCLK、AHB/APB1/APB2分频、各个外设时钟门控开关。
  • 🔁复位管理:系统复位、电源复位、各个片上外设单独硬件复位。

为什么必须要有RCC?

  1. 数字电路全部靠时钟边沿驱动,没有时钟,外设寄存器、触发器全部冻结,无法工作。
  2. 功耗控制:芯片几十个外设,大部分时间不需要工作。不用的外设把时钟关掉,动态功耗几乎降为0。
  3. 灵活配置主频:可以选择不同时钟源,配置PLL倍频,切换系统主频。
  4. 故障处理:支持外设单独复位,外设卡死可以软件复位,不需要整机重启。

RCC自身特殊性 RCC挂载在AHB总线上,RCC自身时钟永久开启,不受时钟门控控制,如果RCC时钟关闭,整个芯片时钟管理直接瘫痪。

时钟树和RCC的关系 时钟树是逻辑流向图;RCC寄存器就是用来搭建这颗时钟树的硬件配置接口。修改RCC寄存器,就改变时钟树通路、分频、开关。


4.2 开关电路:时钟门控(外设时钟开关)

重点:不是电源开关!是时钟信号的开关电路,这是RCC最核心硬件。

1.时钟门控硬件原理图文字版
复制代码
PCLKx(来自APB总线的时钟信号)
     │
     ▼
┌────────────┐
│ 与门 AND门 │◄──── RCC_ENR寄存器对应使能位(0/1)
└─────┬──────┘
      │
      ▼ 输出外设内部时钟 → 送给外设内部所有触发器、寄存器
外设内部模块

硬件逻辑:

  • RCC_ENR对应位置1:与门打开,总线时钟送入外设,外设触发器可以随时钟边沿翻转,寄存器可读写。
  • RCC_ENR对应位置0:与门直接把时钟信号截断,没有时钟脉冲送到外设。 ⚠️外设供电依然存在!寄存器保存原有数值,但是触发器不会翻转,总线读写外设寄存器无效。

2.时钟门控 vs 断电复位,三者区分(面试高频)

方式 供电 时钟 寄存器状态 恢复速度
时钟门控关闭(ENR置0) ✅供电正常 ❌切断时钟 保留原有配置 极快,直接置1即可打开
外设复位(RSTR寄存器置1) ✅供电正常 ✅时钟正常 寄存器全部恢复默认值 先开时钟,再复位,再释放复位
断电 ❌切断电源 ❌无时钟 寄存器全部丢失 慢,需要上电启动

工程编码规范: 开启外设标准流程:开启外设时钟 →(可选执行外设复位,再清除复位)→ 配置外设寄存器。


3.常见踩坑

  1. 只写外设寄存器,忘记打开时钟门控:地址访问没问题,但是硬件没有时钟,写入全部无效。
  2. 先复位外设,再开时钟:复位操作本身也需要外设时钟,时钟没开,复位完全无效。

4.3 RCC关键寄存器配置(STM32F1)

左侧:存储单元 A(D 触发器模型,1bit 存储单元)
  • 写端:要写入的数据(0/1)
  • 使能端:对应时钟上升沿
  • 工作逻辑:
  1. 时钟上升沿到来:内部开关闭合,写端的数据送入锁存模块,保存数值(图中保存 1)。
  2. 上升沿结束,开关自动断开:切断写端,锁存模块独立保持输出电平,写端信号再怎么变,内部存储的值不会改变。
  3. 读端:把锁存住的电平向外输出。

关键点:

更新存储单元,必须依靠时钟边沿。没有时钟边沿,开关不会闭合,新数据写不进去,只能维持旧数值。 STM32 外设寄存器,就是大量这种 1bit 存储单元并排组成。


右侧:与门(时钟门控开关电路)
复制代码
output = input & Enable
  • input:来自总线的时钟脉冲信号
  • Enable:RCC 寄存器的外设时钟使能位(0/1)
  • output:送给存储单元(触发器)的实际时钟

两种工作状态
  1. Enable = 1(开启时钟,RCC->APBxENR 对应位置 1)output = input & 1 = input 时钟脉冲完整输出,存储单元可以收到时钟上升沿,可以正常写、更新寄存器。
  2. Enable = 0(关闭时钟门控)output = input & 0 = 0 输出永远低电平,没有时钟边沿输出到存储单元。

存储单元内部锁存的旧数据依然保留,但是没有时钟边沿,内部开关永远不会闭合,CPU 无法写入新数据。


两张图结合完整串讲(面试必背)
  1. CPU 通过总线,准备好要写入寄存器的数据,送到存储单元的写端。
  2. 如果 RCC 时钟门控的与门 Enable=0:输出没有时钟脉冲。存储单元的开关不会闭合,新数据无法锁存,寄存器维持旧值。就算地址译码正确,写操作也是无效的。
  3. 如果 RCC 时钟门控Enable=1:时钟脉冲正常送到存储单元。时钟上升沿到来,内部开关闭合,写端的数据存入存储单元,寄存器完成更新。

核心结论
  1. 存储单元(触发器)靠时钟边沿完成数据写入锁存。
  2. RCC 时钟门控的与门,本质就是控制时钟脉冲能不能送到触发器。
  3. 关闭时钟门控:存储单元保存原有数据,但是无法写入新数据,供电没有断开。

4.5 高频面试题

  1. RCC是什么,有哪两大功能?

    RCC是复位与时钟控制器。负责时钟源、PLL、总线分频、外设时钟门控开关;同时管理系统和外设硬件复位。

  2. 时钟门控电路原理,是断电吗?

    不是断电,是与门电路截断输入外设的时钟脉冲。

    外设供电保持,寄存器数值保留;

    没有时钟,内部触发器无法翻转,寄存器读写无效。

  3. 开启外设的标准步骤,为什么复位之前要先开时钟?

    ①开启外设时钟门控;

    ②可选执行外设复位,再清除复位;

    ③配置外设寄存器。 复位逻辑也是外设内部电路实现,外设没有时钟门控打开,内部电路不工作,复位指令无效。

  4. ENR寄存器和RSTR寄存器区别?

    ENR:控制时钟门控开关,提供工作节拍;

    RSTR:控制外设复位,把外设寄存器恢复出厂默认。复位操作需要时钟开启才能生效。

  5. 打开HSE之后为什么要等待HSERDY位?直接配置会发生什么?

    外部晶振起振需要时间,RDY硬件置1代表振荡稳定。不等待直接配置,时钟不稳定,会造成程序跑飞死机。

  6. 为什么RCC寄存器永远可以访问?

    RCC挂载AHB总线,自身时钟不受时钟门控控制,始终开启。


4.6 标准系统时钟配置流程(HSE+PLL=72MHz)

标准固件库/HAL库的SystemInit函数,本质就是按这个流程配置时钟:

  1. 复位RCC配置:恢复默认状态,开启HSI
  2. 开启HSE:置位RCC_CR的HSEON位
  3. 等待HSE就绪:循环检测HSERDY位,直到硬件置1
  4. 配置总线分频:设置AHB不分频,APB2不分频,APB1 2分频
  5. 配置PLL:选择HSE为PLL源,设置9倍频
  6. 开启PLL:置位PLLON位
  7. 等待PLL锁定:循环检测PLLRDY位
  8. 切换系统时钟:设置SW位选择PLL作为系统时钟
  9. 等待切换完成:检测SWS位,确认当前时钟是PLL
  10. 配置完成:系统运行在72MHz主频

🚩 深度面试题汇总

  1. STM32F1的APB1和APB2最高频率分别是多少?为什么APB1更低?

    APB2最高72MHz,和AHB同频;APB1最高36MHz,是AHB的2分频。 低速外设不需要高时钟,降频可以降低功耗、减少电磁干扰,也降低硬件设计难度。

  2. APB1上的定时器时钟是36MHz吗?为什么?

    不是,是72MHz。APB预分频系数大于1时,定时器时钟会2倍频。APB1是2分频,所以定时器时钟=36MHz×2=72MHz。

  3. 操作外设为什么必须先开启时钟?不开启会怎么样?

    每个外设都有独立的时钟门控,默认关闭以降低功耗。时钟关闭时外设电路不工作,寄存器无法读写,配置不生效,外设无任何响应。

  4. PLL锁相环的作用是什么?为什么不用高频晶振直接做主时钟?

    PLL把低频时钟倍频到高频,得到系统主频。

    高频晶振成本高、起振难、电磁干扰大;

    低频晶振+PLL成本低、稳定性好,还可以灵活配置主频。

  5. ADC的最大时钟是多少?怎么来的?

    STM32F1的ADC最大工作时钟14MHz,超过会影响精度。

    ADC时钟来自PCLK2分频,常用72MHz÷6分频=12MHz。

  6. 系统时钟切换为什么要等待就绪位?直接切不行吗?

    时钟源启动、PLL锁定都需要时间,未稳定时切换会导致系统时钟不稳定,甚至程序跑飞。必须等待硬件置起就绪位,确认时钟稳定后再切换。

  7. STM32有几个时钟源?各自的用途是什么?

    四个。HSI内部高速8MHz,上电默认、低成本;

    HSE外部高速,高精度主时钟;

    LSI内部低速40kHz,看门狗、低功耗;

    LSE外部低速32.768kHz,RTC实时时钟。

  8. 为什么独立看门狗要用LSI时钟?

    设计上保证主时钟失效时,看门狗仍然能正常工作,实现真正的独立监控,提高系统可靠性。


相关推荐
风123456789~1 小时前
【架构专栏】5.7 软件工程 -软件项目管理 3/3-2
架构·软件工程
chinesegf1 小时前
现代互联网服务的经典架构
服务器·架构·llama
天空'之城1 小时前
单片机基础核心知识点汇总(二十九)
单片机·嵌入式硬件
Rsingstarzengjx1 小时前
第二十六章 Linux 蜂鸣器实验笔记
linux·驱动开发·笔记·stm32·嵌入式硬件·stm32mp157
一路往蓝-Anbo1 小时前
第七篇:以太网设计 —— 从 RMII 时序到变压器隔离的深度拆解
stm32·单片机·嵌入式硬件·嵌入式·stm32硬件设计
MC丶科2 小时前
软考架构师90天冲刺|DAY38·第二阶段综合测试-分布式与云原生
分布式·云原生·架构·serverless·service_mesh·软考架构师
Dawson Zhu2 小时前
离散与连续的博弈:从BM25到向量检索的工程演进与系统融合
人工智能·语言模型·架构·aigc·agi
jianqiang.xue3 小时前
ESP-IDF保姆级入门22|WiFi联网与网络编程全解:STA/AP双模式/TCP-UDP Socket/HTTP服务端/自动重连,掌握工业级可靠网络通信
人工智能·stm32·单片机·mcu·物联网·51单片机·iot
恒锐丰科技林技术员7 小时前
EG2302 半桥驱动芯片详解:高压半桥高性价比栅极驱动方案
经验分享·嵌入式硬件·硬件工程