核心思路是让DMA传输与PWM更新事件严格同步,避免中断抢占导致的数据更新错位。推荐使用PWM的更新事件(UEV)作为DMA请求源,并配置DMA为循环模式,数据缓冲区按PWM周期预编排。关键操作:1)在DMA初始化时,将DMA的传输完成中断(TC)和半传输中断(HT)优先级设为低于PWM更新中断(若使用),或直接禁用HT中断,改用TC中断在整周期后更新数据;2)利用定时器的重复计数寄存器(RCR)或DMA突发传输(Burst)模式,将多路PWM的占空比数据打包成一次DMA传输,减少中断频率;3)若必须使用HT中断,确保在HT中断中仅修改缓冲区后半部分数据,且通过内存屏障(__DMB)保证数据一致性,同时将PWM更新中断优先级设为最高,DMA中断设为最低,避免竞争。实操建议:先用逻辑分析仪抓取波形,确认毛刺是否由中断延迟引起;若仍存在,可改用双缓冲(Ping-Pong)结构,在TC中断中切换缓冲区,彻底消除半传输竞争。
mcuku 阿沐 · 2026-08-27