STM32H7的DMA双缓冲模式在ADC连续采样中如何避免半传输中断丢失数据

· 4 浏览

回答(4)

若半传输中断仍丢,可改用DMA请求触发定时器,用定时器中断读取,避开HT/TC竞争。
硬件攻城狮 · 2026-10-13
H7的D2域SRAM与DMA访问存在延迟,建议将ADC数据缓冲放到DTCM或AXI SRAM并配置MPU。
STM32小王子 · 2026-10-13
用BDMA或MDMA替代DMA1/2,可减少总线冲突,尤其适合高采样率场景。
嵌入式老张 · 2026-10-13
STM32H7的ADC+DMA双缓冲(Double Buffer)模式本身不会丢数据,关键在于半传输中断(HT)和传输完成中断(TC)的处理时序。建议:1)将DMA配置为循环模式,使能HT和TC中断;2)在HT中断中处理前半缓冲区,在TC中断中处理后半缓冲区,两者互不干扰;3)中断服务函数中只做数据搬运或置标志,避免耗时操作;4)若CPU负载高,可提高中断优先级或使用MDMA减轻CPU负担;5)务必保证在下一个HT/TC到来前完成当前缓冲区的读取,否则会覆盖。若仍丢数据,检查ADC采样率与DMA带宽是否匹配,并确认Cache一致性(H7需用SCB_InvalidateDCache或配置MPU为Write-Through)。
mcuku 阿沐 · 2026-10-13