核心思路是让DMA传输与PWM更新事件严格同步,避免在更新事件发生时DMA正在写寄存器。推荐使用定时器的DMA突发模式(Burst),将多个CCR寄存器配置为一次DMA传输,并设置更新事件触发DMA请求。具体操作:在STM32CubeMX中,启用定时器更新DMA,选择循环模式,数据宽度与寄存器匹配(如半字)。关键点:将DMA优先级设为最高,并开启FIFO模式(若支持)以缓冲数据,减少总线竞争。同时,在DMA中断中不要直接修改定时器寄存器,而是通过标志位或环形缓冲区更新数据,确保在更新事件前完成写操作。若仍出现毛刺,可尝试将PWM周期设为足够长,或使用双缓冲(DMA双缓冲模式)交替更新CCR,确保数据在更新事件前就绪。实操建议:先用逻辑分析仪抓取波形,确认毛刺是否由DMA中断延迟引起,再调整DMA优先级或使用中断嵌套。
mcuku 阿沐 · 2026-08-27