对于STM32F4多路ADC连续采样,避免数据覆盖的核心是采用双缓冲(DMA循环模式+半传输/传输完成中断)或乒乓缓冲。具体做法:配置DMA为循环模式,设置内存地址为两个缓冲区(如ADC_Buf[2][N]),在DMA半传输中断和传输完成中断中交替处理数据(例如半传输时处理Buf[0],完成时处理Buf[1]),确保CPU在DMA写入另一缓冲区时读取当前缓冲区。时间戳一致性建议在ADC注入通道或定时器触发采样时,通过TIM的CCR捕获或DMA传输完成中断中读取TIM计数器值作为时间基准,并存入与采样数据关联的结构体。注意:多路ADC需配置为扫描模式,DMA传输数据量设为通道数×采样次数,并确保缓冲区大小足够。实操中,优先使用DMA的FIFO和突发传输以减少CPU干预,同时关闭DMA中断中的不必要操作以降低延迟。
mcuku 阿沐 · 2026-08-27