STM32 PWM输出实现呼吸灯:从原理到DMA控制RGB

JUMU实名认证 发表于 2026-08-26 01:10 | 显示全部楼层 | 复制链接分享      上一主题  翻页  下一主题
PWM(脉宽调制)是嵌入式开发中极其常用的技术,通过调节脉冲的占空比来控制输出电压的平均值,广泛用于电机调速、LED调光、蜂鸣器控制等场景。呼吸灯是学习PWM最直观的入门项目:让LED亮度从暗到亮、再从亮到暗循环变化,仿佛在呼吸。本文以STM32为例,从PWM原理讲到DMA控制RGB全彩呼吸灯。
一、PWM的原理与关键参数PWM信号是一串频率固定的方波,有两个关键参数:频率和占空比。占空比指高电平时间占整个周期的比例。LED的亮度与平均电流相关,而平均电流由占空比决定——占空比越大越亮。STM32的定时器在PWM模式下,通过计数寄存器CNT与比较寄存器CCR的比较结果产生输出:CNT小于CCR时输出高(或低,由极性决定)。控制CCR的值即可连续调节占空比,从而平滑改变LED亮度。理解CNT、ARR(自动重装载值)和CCR三者的关系,是配置PWM的基础。
三、定时器PWM配置步骤以STM32F103的TIM2为例,用标准库配置PWM的步骤是:开启定时器和对应GPIO的时钟;把输出引脚配置为复用推挽输出;初始化定时器时基,设置预分频PSC和自动重载ARR确定PWM频率;初始化PWM输出通道,设置输出模式(PWM1或PWM2)、极性和初始占空比CCR;最后使能定时器和输出通道。频率计算公式为 Fpwm = 时钟 / ((PSC+1) × (ARR+1))。呼吸灯只需在程序中周期性地递增/递减CCR值,就能看到亮度的渐变效果。配置时注意GPIO复用功能要选对,否则引脚无输出。
三、DMA控制RGB三色呼吸灯单个呼吸灯用软件改CCR即可,但要实现RGB三色分别呼吸,主循环频繁改寄存器既繁琐又占CPU。更优雅的方案是用DMA自动更新CCR:把要输出的一组占空比数据放在数组里,由定时器的更新事件触发DMA,把数组数据逐个搬运到定时器的CCR寄存器,CPU完全不用干预。配置要点:DMA传输方向为内存到外设(内存数组到CCR地址),传输模式为循环;数组数据根据呼吸曲线生成,例如按正弦或三角波排列;三个颜色通道各自配置DMA和数组,即可实现RGB独立呼吸、混合出千万种颜色。DMA方案让CPU从繁琐的寄存器操作中解放出来,是高性能LED控制的推荐做法。
四、常见问题与调试技巧常见问题:一是LED不亮,检查GPIO复用、定时器时钟和PWM极性是否配置正确;二是亮度调节不平滑,占空比变化步长过大或变化过快,应细化步长并加延时;三是DMA更新不生效,确认DMA传输模式为循环模式、数据宽度与外设一致,并检查是否开启了定时器更新DMA请求;四是频率过低导致LED闪烁,把PWM频率提高到人眼不可感知的范围内(如1kHz以上)。先跑通单通道呼吸灯,再扩展到DMA控制RGB,是理解PWM与DMA协同工作的最佳路径。

  距米网  

找到您想要的设计

工程师、学生在线交流学习平台
关注我们

手机版- JMCAD苏ICP备18040927号-1

©2017-2026 常州居居米智能技术有限公司 苏公网安备32041102000587号