STM32定时器PWM怎么配置与应用?嵌入式工程师面试

浏览量:13
时间: 2026-09-14 19:49:04
一句话答案

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 开关损耗和电感可接受范围)

示波器显示 STM32 输出的 PWM 方波,开发板连接调试器,屏幕上显示 PWM 配置代码

面试官:用 STM32F103 的 TIM2,时钟 72MHz,我要输出 1kHz、占空比 30% 的 PWM,ARR 和 CCR 怎么配?

面试官考察点

这是必考题,现场算。面试官看:①公式是否记牢;②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_CLK72MHzTIM2 挂 APB1
PSC7172 分频,计数时钟 1MHz
ARR999周期 1000 计数,频率 1kHz
CCR300占空比 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),否则输出不了标准电平。

面试官可能追问

追问 1:PSC 和 ARR 怎么分配更合理?
尽量让 ARR 大以提高占空比分辨率,PSC 只做粗分频。例如要 1kHz,优先 PSC 小、ARR 大;但 ARR 受 16 位限制,超了就要减小 PSC 或换 32 位定时器(TIM2/TIM5)。
追问 2:死区时间是什么?为什么电机需要?
半桥电路上下两个 MOS 不能同时导通(直通短路)。死区是互补两路信号切换时插入的一段都关断的时间,等 MOS 完全关断再开另一个,通常几百 ns 到几 μs,按器件开关时间选。
追问 3:PWM 频率选多少合适?
LED 调光 1~20kHz(避开人眼闪烁和音频噪声);电机 10~20kHz;开关电源几百 k 到 MHz。频率太高开关损耗大,太低电感电流脉动大。
追问 4:怎么实现 PWM 突发输出(指定个数脉冲)?
用定时器的 PWM 输入模式或联动 TRGO,配合另一定时器触发;高级定时器有重复计数器 RCR,可以精确控制输出脉冲数后自动停止。
追问 5:CCR 和 ARR 一样大会怎样?
PWM1 模式下占空比 100%(一直高);CCR=0 时占空比 0%(一直低)。注意 ARR=0 时不计数,要设成需要周期减 1。

常见失分表达

✗ PWM 就是调占空比,频率随便 — 频率和 ARR/PSC 的关系讲不清,现场算不出来。
✗ 电机就用普通定时器输出就行 — 不知道高级定时器的互补、死区、刹车功能,做过电机会出事。
✗ 改占空比要重新初始化定时器 — 不了解 CCR 可在线修改,程序写得笨。

准备动作

1
现场练 3 道算题:72MHz 下输出 1kHz/10kHz/50Hz,分别配 PSC/ARR/CCR
2
画一张半桥驱动示意图,标出 CHx/CHxN 互补信号和死区位置
3
在 CubeMX 里配一次 TIM1 PWM 互补输出 + 死区 + BKIN,看生成的代码
4
准备一个项目例子:你用 PWM 做过 LED 调光、电机调速或电源控制

核心关键词

PWMARRCCR占空比死区时间高级定时器


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
简要说明linux内核的基本构成?(结构模块表示)

MMU:内存管理单元,完成地址映射(应用虚拟地址方式)VFS:虚拟文件管理系统,提供了统一管理计算机资源的途径。使统一规范计算机资源的使用格式成为可能,方便传输... 详情>>

2024-10-16 17:02:07
PCB高速信号换层时,回流路径应该怎样处理?面试别只说“加地过孔”

题库分类:PCB设计适合经验:0—5年难度:中级题型:技术基础题 + 布局场景题面试题高速信号从一层通过信号过孔换到另一层时,回流路径会发生什么变化?你会怎样布... 详情>>

2026-07-30 09:53:29
FPGA时钟资源BUFG/BUFR/BUFIO/BUFH怎么选?FPGA面试详解

分类:FPGA设计经验级别:1-3年难度:中级题型:资源选型+设计经验本文概述:FPGA中有多种时钟缓冲资源,按驱动范围从大到小分别是BUFG(全局时钟缓冲)、... 详情>>

2026-08-17 11:13:35
逻辑电平转换怎么设计?3.3V与5V双向电平转换怎么做?硬件工程师面试

硬件设计中级技术基础题本文概述电平转换是混合电压系统设计的常见需求,也是硬件面试的实用高频题。面试官想听的不是“串个电阻分压”,而是你懂不懂电平转换的几种实现方... 详情>>

2026-09-08 08:59:18
PCB电源完整性怎么仿真?PDN阻抗分析与去耦设计核心考点

PCB仿真中等偏难技术面试电源完整性PDN阻抗本文概述电源完整性是PCB仿真的核心方向之一。PDN阻抗分析的目标是使电源分配网络在芯片工作的全频段内阻抗低于目标... 详情>>

2026-08-26 17:28:36
开班信息