STM32 PWM模式全解析:从基础PWM到Combined PWM的进阶指南
在嵌入式开发的世界里,STM32的定时器系统以其强大和灵活著称,而PWM(脉冲宽度调制)无疑是其中最常用、最核心的功能之一。无论是驱动电机、控制LED亮度,还是生成复杂的音频信号,PWM都扮演着关键角色。对于初学者而言,配置一个基础PWM输出或许并不困难,但当你面对需要生成互补、带死区、甚至具有特定相位关系的复杂PWM波形时,STM32定时器那些更深层次的模式——特别是Combined PWM模式——的价值就凸显出来了。
这篇文章旨在为你拨开迷雾。我们不满足于仅仅告诉你如何配置寄存器让一个引脚输出方波,而是要深入STM32定时器的内部逻辑,厘清PWM模式1、模式2的本质区别,并最终揭开Combined PWM模式的神秘面纱。你会发现,理解了这些,你就能从“会使用PWM”进阶到“能驾驭PWM”,从而在电机控制、数字电源、高级照明等项目中游刃有余。本文面向所有希望深入理解STM32 PWM机制的开发者,无论你是正在入门,还是已经有一定经验但想突破瓶颈,这里都有你想要的干货。
1. 基础重温:PWM的核心与STM32的实现逻辑
在深入任何高级模式之前,我们必须确保对基础概念有统一且清晰的认识。PWM的本质是一种用数字信号模拟模拟量的技术。它通过调节一个周期固定方波的占空比(高电平时间占整个周期的比例),来等效输出不同的平均电压或功率。
在STM32的定时器里,PWM的生成依赖于几个核心寄存器:计数器TIMx_CNT、自动重载寄存器TIMx_ARR(决定周期)和捕获/比较寄存器TIMx_CCRx(决定占空比)。定时器以特定频率计数(向上、向下或中央对齐),并将TIMx_CNT的值与TIMx_CCRx的值进行实时比较。这个比较的结果,产生一个内部的参考信号OCxREF。OCxREF的高低电平变化规律,就是我们所说的PWM模式。
这里有一个至关重要的概念需要厘清:OCxREF是内部逻辑信号,它并不直接等于你最终在GPIO引脚上测得的电平。引脚的实际输出,是由OCxREF再经过一个“输出极性控制”单元决定的。这个单元可以根据CCxP位的配置,决定是否对OCxREF进行取反。
注意:很多初学者混淆了
OCxREF和最终输出。请始终记住,OCxREF是“比较匹配事件”产生的原始逻辑,而引脚输出是经过极性包装后的结果。配置时,先想清楚你想要的OCxREF波形,再通过极性控制来适配你的硬件电路(例如,驱动是低电平有效还是高电平有效)。
STM32最基础的两种PWM模式定义,完全围绕着TIMx_CNT与TIMx_CCRx的比较关系展开:
-
PWM模式1:
- 向上计数时:当
TIMx_CNT<TIMx_CCRx,OCxREF= 有效电平(通常为1);否则OCxREF= 无效电平(通常为0)。 - 向下计数时:当
TIMx_CNT>TIMx_CCRx,OCxREF= 无效电平;否则OCxREF= 有效电平。 - 简单记忆:在计数方向上,先有效,后无效。对于向上计数,计数器从0开始,一上来就小于CCR,所以立刻输出有效,直到超过CCR才变无效。
- 向上计数时:当
-
PWM模式2:
- 向上计数时:当
TIMx_CNT<TIMx_CCRx,OCxREF= 无效电平;否则OCxREF= 有效电平。 - 向下计数时:当
TIMx_CNT>TIMx_CCRx,OCxREF= 有效电平;否则OCxREF= 无效电平。 - 简单记忆:在计数方向上,先无效,后有效。它是模式1的完全反相。
- 向上计数时:当
为了更直观地理解,假设ARR=8, CCR=3,采用向上计数模式:


576

被折叠的 条评论
为什么被折叠?



