核心方案:使用ADC的DMA循环模式+双缓冲(或环形缓冲),并启用DMA传输完成中断。关键在于配置ADC为扫描模式且DMA按字(32位)传输,确保每个通道数据对齐到固定偏移。具体:1) 初始化ADC时设置DMA请求为循环模式,数据宽度为字(若ADC为12位,可左对齐或右对齐,但需统一);2) 使用DMA的双缓冲(Memory-to-Memory模式或双缓冲DMA)交替存储两批数据,在传输完成中断中切换处理,避免读写冲突;3) 为保证时序一致性,需固定采样顺序(如规则序列),并确保DMA传输速率高于ADC采样率,防止溢出;4) 在中断中通过标志位判断数据完整性,若发生溢出(OVR)则丢弃该批次。实操建议:使用HAL库的HAL_ADC_Start_DMA(),并配置回调函数;调试时用逻辑分析仪验证通道对应关系。
mcuku 阿沐 · 2026-08-27