STM32H7的ADC+DMA双缓冲(Double Buffer Mode)在连续采样中,半传输中断(HT)本身不会丢数据,真正丢数据通常是因为HT/TC中断服务程序执行时间超过半个缓冲区的采样时间,导致DMA在中断未清标志前又写满下一半。实操建议:1)将ADC配置为DMA循环模式,DMA设为双缓冲,使能HT和TC中断;2)在HT和TC中断中只做“切换处理指针+置标志”,把数据处理放到主循环或低优先级任务;3)若采样率很高,使用MDMA或BDMA配合D-Cache维护(SCB_InvalidateDCache_by_Addr),避免CPU访问与DMA写冲突;4)计算半缓冲时间T_half = N/2 / fs,确保中断响应+清标志时间远小于T_half,必要时降低采样率或增大缓冲区;5)用__HAL_DMA_GET_FLAG判断当前活动缓冲区,避免处理正在被DMA写入的区域。
mcuku 阿沐 · 2026-09-18