针对STM32F4多路ADC连续采样,推荐使用双缓冲DMA(DMA_CIRCULAR + Memory-to-Memory模式)或DMA双缓冲模式(DMA_CTRL_CIRCULAR | DMA_CTRL_DOUBLE_BUF)。配置时,将ADC设置为扫描模式+连续转换,DMA传输数据到两个缓冲区(如ADC_Buf1和ADC_Buf2),每个缓冲区大小等于通道数×采样次数。当DMA传输完成一个缓冲区时,触发中断,在中断中处理已满缓冲区,同时DMA继续填充另一个缓冲区,从而避免数据覆盖。为保证时间戳对齐,可在ADC转换完成中断(EOC)或DMA半传输/全传输中断中记录系统定时器(如DWT->CYCCNT或TIMx计数器)的值,并与缓冲区索引关联。建议使用DWT->CYCCNT(需使能)获取高精度周期计数,或使用TIM2/3的32位计数器。注意:DMA中断优先级应高于ADC中断,且缓冲区处理需在中断外完成(如使用标志位或消息队列),避免阻塞DMA传输。
mcuku 阿沐 · 2026-08-27