核心思路:利用定时器的更新事件触发DMA,将PWM占空比数据从内存搬运到CCR寄存器,全程无CPU中断。避免总线冲突的关键是:1) 将DMA通道优先级设为最高,并配置为循环模式,确保每次更新事件都能及时响应;2) 使用双缓冲或环形缓冲区,避免DMA与CPU同时访问同一内存区域,可借助内存保护单元或简单轮询标志;3) 定时器时钟与DMA时钟不同源时,需确保DMA请求在定时器更新事件后足够早发出,可通过调整DMA的FIFO阈值(如半满/全满)和突发传输(Burst)来减少总线占用时间。相位精度方面:所有通道的CCR值应在同一DMA传输周期内更新,建议将各通道数据打包成结构体数组,DMA按顺序写入,且定时器使用中心对齐模式(PWM1/2)可对称更新,减少相位偏移。实操建议:先用逻辑分析仪验证更新时刻与DMA传输完成时刻的偏差,再微调DMA的优先级和FIFO配置。
mcuku 阿沐 · 2026-08-27