STM32 PWM 靠定时器的 ARR(决定频率)和 CCR(决定占空比)配合输出,配置时先选定时器时钟、算 ARR 决定频率、再用 CCR 调占空比;高级定时器还带刹车、死区,做电机和电源必问。
本文概述
PWM 是单片机最高频考点之一,LED 呼吸灯、电机调速、开关电源都用它。面试常考:PWM 频率怎么算、ARR/CCR 关系、通道互补输出、死区时间、刹车功能。回答要能现场算一组频率和占空比,并说清应用场景。
核心要点
PWM 频率 = 定时器时钟 / ((ARR+1)*(PSC+1)),ARR 决定周期、CCR 决定占空比
占空比 = CCR/(ARR+1),改变 CCR 即可调占空比,不需重新初始化
高级定时器(TIM1/TIM8)支持互补输出、死区时间、刹车输入,用于半桥/全桥电机
输出比较模式选 PWM1/PWM2,CHx 与 CHxN 互补,需配置 GPIO 复用推挽
做开关电源或电机时频率要在器件最佳区间(如 MOSFET 开关损耗和电感可接受范围)

面试官考察点
这是必考题,现场算。面试官看:①公式是否记牢;②PSC 和 ARR 怎么分;③是否知道 0 起始;④是否注意溢出和分辨率。算不出来基本挂。
回答思路
先写公式,再代数字,给一组合理的 PSC/ARR/CCR,并解释为什么这样选(比如 72 分频让 ARR=999,分辨率 10bit)。
参考回答
先写公式。PWM 频率由定时器计数周期决定:
PWM 频率 = TIM_CLK / ((PSC+1) × (ARR+1))
占空比 = CCR / (ARR+1)
代入计算。TIM2 在 STM32F103 上挂 APB1,时钟 72MHz。要 1kHz:
选 PSC=71(分频 72),计数时钟 = 72MHz/72 = 1MHz;
ARR+1 = 1MHz/1kHz = 1000,所以 ARR=999;
占空比 30%:CCR = 1000×0.3 = 300。
| 参数 | 值 | 说明 |
|---|---|---|
| TIM_CLK | 72MHz | TIM2 挂 APB1 |
| PSC | 71 | 72 分频,计数时钟 1MHz |
| ARR | 999 | 周期 1000 计数,频率 1kHz |
| CCR | 300 | 占空比 30% |
为什么这样选。PSC=71 把时钟降到 1MHz,ARR=999 给了 1000 级分辨率(约 10bit),调占空比够细。如果要更高分辨率,可以减小 PSC、增大 ARR;但 ARR 是 16 位,最大 65535,算不下来就要换思路。
实际应用要点。
普通 PWM(LED 调光、蜂鸣器):用通用定时器(TIM2~5),单路输出即可;
电机/电源:用高级定时器 TIM1/TIM8,开 CHx/CHxN 互补输出,配死区时间防止上下桥臂直通,接刹车输入(BKIN)故障时立即关断;
占空比在线调整只改 CCR,HAL 库用 __HAL_TIM_SET_COMPARE(),不用重初始化;
GPIO 配成复用推挽(AF_PP),否则输出不了标准电平。

扫码关注





























