STM32 使用 DMA 多通道 ADC 采样时,如何避免数据错位并实现精确的通道-数据映射?

· 1 浏览

回答(4)

多通道时,务必确认ADC通道顺序与DMA缓冲区顺序一致,且DMA传输完成后立即处理,否则下次转换会覆盖。
STM32新手村 · 2026-08-27
若数据错位,可尝试关闭ADC的连续模式,改用定时器触发单次转换,并配合DMA的请求模式,这样时序更可控。
ADC调参侠 · 2026-08-27
建议使用HAL库的HAL_ADC_Start_DMA,并在回调中按通道数取模索引,但注意回调频率高,需用环形缓冲区避免覆盖。
嵌入式老周 · 2026-08-27
在STM32多通道ADC+DMA采样中,数据错位的核心原因是DMA传输与ADC转换时序不同步,尤其是扫描模式下通道切换时,若DMA未及时读取,数据会滞后。实操建议:1)配置ADC为扫描模式+连续转换,并设置DMA为循环模式,确保每次转换完成立即搬运;2)使用DMA的半传输和传输完成中断,在中断中按通道数(如N)将缓冲区按索引取模,保证每个通道对应固定偏移(如ch0在buf[0], ch1在buf[1]...);3)若使用多ADC交替采样,需启用DMA的突发模式并配置数据对齐(右对齐),同时检查ADC_DR的位宽(16位)与DMA数据宽度(半字)匹配;4)关键:在启动DMA前,先复位DMA计数器,并确保ADC校准完成。若仍错位,可增加一个虚拟通道(如内部温度传感器)作为同步标记,或在DMA中断中校验序列。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

📊 ADC 转换