核心思路是让DMA中断尽量少干预主循环,采用双缓冲(DMA半传输/全传输中断)配合定时器更新事件同步。具体做法:1)将PWM比较值数组按半周期拆分,DMA配置为循环模式,在半传输和全传输中断中交替更新下一半数据,确保数据在PWM周期边界前就绪;2)中断服务函数中只做内存拷贝或标志置位,避免在中断里计算频率或调用耗时函数;3)若多路频率差异大,建议每路独立定时器+DMA,或使用定时器主从模式(如主定时器触发从定时器)同步更新,减少相位漂移;4)启用DMA的FIFO和突发模式,降低总线占用;5)实测时可用逻辑分析仪观察抖动,若仍存在,可考虑将更新提前到PWM周期起始(如使用更新事件触发DMA传输)。关键原则:中断只做‘搬运’,计算放主循环,且确保DMA传输时间远小于PWM周期。
mcuku 阿沐 · 2026-08-27