在STM32的DMA双缓冲ADC采集中,缓冲区切换瞬间的数据丢失通常源于DMA传输完成中断与ADC采样时序的竞争。核心解决思路是:利用DMA的循环模式(Circular Mode)配合双缓冲,让DMA自动切换目标地址,避免手动干预。具体操作:1) 配置DMA为循环模式,内存地址设为两个缓冲区的基地址,数据长度设为缓冲区大小;2) 在DMA传输完成中断(TC)中,仅更新软件标志,不修改DMA寄存器;3) 当ADC采样率固定时,确保DMA传输速度远高于ADC产生速率,使切换发生在采样间隙。若仍存在丢失,可启用ADC的DMA请求的‘Last’位(部分系列支持),或改用定时器触发ADC采样,使采样与DMA切换同步。实操建议:先用逻辑分析仪抓取TC中断时序,验证切换是否落在采样窗口外;若无法避免,可在缓冲区末尾预留2-3个冗余样本,丢弃切换瞬间的数据。
mcuku 阿沐 · 2026-08-27