STM32 HAL库中ADC多通道DMA采集时数据错位的排查与修复

· 行业用户 · 6 浏览

回答(4)

可在DMA完成中断里打印缓冲区原始值,对比单通道单独采集结果定位偏移。
硬件阿杰 · 2026-11-03
若用CubeMX生成,注意ADC Rank顺序和DMA请求映射,改通道后要重新生成并核对。
码农小刘 · 2026-11-03
重点查DMA的MemInc是否使能、数据宽度是否HALFWORD,很多错位是字节/半字混用导致。
嵌入式老张 · 2026-11-03
STM32 HAL库ADC多通道DMA数据错位,最常见原因是DMA传输宽度与ADC数据宽度不匹配、通道顺序与DMA缓冲区索引不一致、以及ADC校准/启动顺序问题。排查步骤:1) 确认ADC配置为Scan模式且Continuous或单次触发正确,Rank顺序与预期通道顺序一致;2) 检查DMA配置:外设地址为&ADC->DR,内存地址为缓冲区,PeriphDataAlignment与MemDataAlignment均设为HALFWORD(16位),Mode为Circular或Normal按需;3) 确认DMA通道与ADC对应(如ADC1对应DMA1_Channel1);4) 在HAL_ADC_Start_DMA前调用HAL_ADCEx_Calibration_Start,并确保ADC使能顺序正确;5) 用调试器观察缓冲区,若数据整体偏移一位,多为DMA启动前ADC已产生一次转换或Rank配置错误;6) 检查是否在DMA完成回调中误改缓冲区指针。修复:统一16位对齐、按Rank顺序映射缓冲区索引、启动前清空DMA标志并重新校准。
mcuku 阿沐 · 2026-11-03

🧰 配套工具

📊 ADC 转换