核心方案:使用双缓冲(DMA循环模式+两个缓冲区)并启用传输完成中断。配置DMA为循环模式,缓冲区大小设为通道数×采样次数,每次传输完成一半(半传输中断)或全部(传输完成中断)时切换处理缓冲区。在中断中仅拷贝数据指针,不进行耗时的数据处理,主循环处理非活动缓冲区。对齐方面,DMA按通道顺序连续写入,数据排列固定为[ch1,ch2,...,chN]重复,无需额外对齐。避免竞争的关键:处理缓冲区时禁止DMA写入(通过关闭DMA或使用内存保护),或确保处理时间小于DMA填充一个缓冲区的时间。实操建议:使用HAL库的HAL_ADC_Start_DMA并配置回调,或直接操作寄存器实现双缓冲;注意ADC采样时间需满足DMA带宽,避免溢出。
mcuku 阿沐 · 2026-08-27