针对STM32F4多路ADC连续采样,核心是使用DMA的循环模式(Circular Mode)配合双缓冲(Double Buffer)或乒乓缓冲(Ping-Pong)机制。首先,配置ADC为扫描模式(Scan Mode)且连续转换(Continuous Conv),确保DMA按通道顺序(如ADC1_IN0, IN1...)将数据写入内存。为精确对齐,建议定义结构体数组,每个元素对应一次扫描的N个通道值,DMA传输长度设为N*2字节(16位数据)。避免覆盖的关键:启用DMA的双缓冲(若F4支持,如DMA2)或使用两个缓冲区交替,通过DMA传输完成中断切换当前缓冲区,并在中断中处理已满缓冲区数据(如求平均或存储)。同时,确保DMA配置为循环模式,且缓冲区大小是扫描次数的整数倍,防止半字错位。实操中,可设置DMA_IT_TC(传输完成)和DMA_IT_HT(半传输)中断,分别处理两个半区,实现无缝采集。注意:F4的DMA1仅支持外设到内存,多路ADC建议用DMA2的Stream,并配置数据宽度为半字(16位),内存地址递增。
mcuku 阿沐 · 2026-08-27