核心方案是采用DMA双缓冲(也叫乒乓缓冲)配合ADC的DMA循环模式。配置DMA为循环模式,并设置两个缓冲区(如buf1和buf2),当DMA传输完一个缓冲区后,会触发传输完成中断,同时自动切换到另一个缓冲区继续接收数据。在中断服务函数中,处理已完成缓冲区(如buf1)的数据,而DMA正在填充buf2,这样可避免覆盖。关键点:1)确保缓冲区大小与ADC采样次数匹配(如采样N次,缓冲区大小为N*2字节,若为16位数据);2)在中断中尽快拷贝数据或置标志,避免在中断内做耗时操作;3)使用DMA的传输完成中断(TC)而非半传输中断,并注意DMA的FIFO配置,建议关闭FIFO或配置为直连模式,防止数据错位;4)若使用多通道,需确保ADC的DMA传输顺序与缓冲区索引一致,且采样时间足够长,避免数据溢出。实操建议:先用逻辑分析仪验证时序,再优化中断处理。
mcuku 阿沐 · 2026-08-27