核心方案:采用“双缓冲+定时器触发+DMA循环模式”架构。1)配置ADC为扫描模式+连续转换,DMA设为循环模式,并启用DMA半传输/传输完成中断;2)使用两个缓冲区(如buf[2][N*CH]),在中断中交替切换当前写入区,确保每次处理的是完整一轮采样数据;3)用定时器(如TIM1)的更新事件触发ADC启动,保证采样周期精确;4)在DMA中断里先读DMA当前数据指针(DMA_GetCurrDataCounter)校验对齐,再处理数据。实操建议:缓冲区大小设为通道数整数倍,并启用DMA的FIFO(若支持)减少总线冲突;处理数据时禁用中断或使用临界区,防止读写竞争。若仍错位,检查ADC的DMA请求是否配置为循环模式且数据宽度与缓冲区匹配(如16位)。
mcuku 阿沐 · 2026-08-27