核心方案:使用DMA双缓冲(Memory-to-Memory模式)配合定时器更新事件触发ADC,并利用DMA传输完成中断进行缓冲切换。具体做法:1)配置ADC为定时器触发连续采样,DMA设为循环模式,双缓冲地址分别指向两个数组,数据宽度与ADC对齐;2)在DMA传输完成中断(TC)中,通过检查当前活动缓冲(DMA_GetCurrentMemoryTarget)判断哪个缓冲已满,处理非活动缓冲数据,避免覆盖;3)精确同步:将定时器频率设为ADC采样率,使用定时器更新事件(如TIMx_UP)作为ADC触发源,并在定时器中断中置标志,确保采样与PWM或控制周期对齐。注意:DMA双缓冲切换由硬件自动完成,但需在中断中快速处理,避免延迟导致丢数;建议使用DMA的FIFO和突发传输降低CPU负载。实测中,将DMA优先级设为最高,并关闭不必要的中断可显著减少抖动。
mcuku 阿沐 · 2026-08-27