要避免DMA+PWM输出多路精确脉宽时的总线冲突,核心是减少DMA与CPU对SRAM的争用。建议:1)将PWM比较值缓冲区放在DMA专用内存区(如STM32F4的CCM RAM,或F7/H7的DTCM),并确保DMA通道优先级高于CPU访问(通过DMA优先级配置和总线矩阵仲裁)。2)使用双缓冲(Ping-Pong)机制,让DMA在后台更新比较值,CPU只在前台修改影子缓冲区,避免同一时刻访问同一地址。3)若使用定时器更新事件触发DMA,确保DMA传输周期短于PWM周期,且将DMA中断优先级设为最高,但中断服务函数中仅做标志位操作,不执行耗时任务。4)对于多路PWM,可合并为单次DMA传输(如使用TIM1的DMA突发模式),减少总线占用次数。实测中,将DMA配置为循环模式并启用FIFO(若支持)可进一步平滑总线负载。若仍抖动,可考虑降低PWM频率或改用硬件比较输出(如HRTIM)。
mcuku 阿沐 · 2026-08-27