核心方案:用DMA将预计算的PWM占空比数据批量搬运到定时器的比较寄存器(如STM32的CCR),配合定时器的更新事件触发DMA传输,实现多路PWM的自动刷新。关键点:1)选择支持DMA请求的定时器(如TIM1/8高级定时器或TIM2-5通用定时器),配置PWM模式1或2;2)将多路占空比按通道顺序存入内存数组,DMA循环模式搬运,每更新一次即刷新所有通道;3)利用定时器的重复计数(RCR)或DMA半传输/传输完成中断(仅用于维护,不参与实时控制),避免CPU频繁介入。实操建议:优先使用双缓冲(DMA的memory-to-memory或ping-pong),防止数据撕裂;若需更高精度,可结合定时器时钟分频和PWM分辨率计算(如72MHz主频下,1kHz PWM需72个时钟周期,分辨率约1.4%)。注意:DMA传输速率需匹配PWM频率,避免溢出;多路时建议用结构体数组对齐内存,减少总线冲突。
mcuku 阿沐 · 2026-08-27