实现无中断延迟的ADC连续采样,关键在于利用DMA双缓冲(Double Buffer)模式,让DMA在后台交替填充两个缓冲区,而CPU无需在每个采样点响应中断。具体做法:配置ADC为连续转换模式(如扫描模式),触发源设为定时器(如TIM1)以固定采样率;将DMA设置为循环模式且启用双缓冲(通过DMA_SxCR的DBM位),并分别设置两个内存缓冲区地址(M0AR和M1AR)。当DMA填满一个缓冲区后,会自动切换至另一个缓冲区,同时触发传输完成中断(TC)或半传输中断(HT)。在中断服务函数中,仅更新缓冲区索引并处理已满的数据,而不需停止ADC或DMA,从而避免采样延迟。实操建议:1)确保缓冲区大小与ADC转换次数匹配(如N次转换);2)使用DMA的HT和TC中断分别处理半满和全满,实现流水线处理;3)在中断中快速拷贝数据或使用双核(如H7)避免阻塞;4)注意内存对齐(如4字节)以提升效率。此方案可达到零中断延迟,因为DMA硬件自动切换,CPU仅在数据就绪时介入。
mcuku 阿沐 · 2026-08-27