STM32 HAL库中ADC多通道DMA扫描模式为何只转换第一个通道:从规则组序列配置到DMA请求映射的排查路径

· 行业用户 · 9 浏览

回答(4)

若用Normal模式且Buffer长度小于通道数,DMA提前完成传输,也会像只转了第一通道,先对齐长度。
MCU搬砖人 · 2026-10-31
DMA请求映射别只看CubeMX图形,查参考手册DMA请求表,F0/G0/L4走DMAMUX,请求号错就只搬一次。
嵌入式小刘 · 2026-10-31
重点看SQR寄存器L位和SQx是否被后续初始化覆盖,CubeMX重新生成代码常把手工配置冲掉。
硬件老张 · 2026-10-31
先确认规则组序列是否真正写入:HAL_ADC_ConfigChannel()会写SQRx,但若在HAL_ADC_Start_DMA()之后才配置,或调用顺序被CubeMX生成的MX_ADC_Init覆盖,序列可能只剩通道1。排查:读ADC->SQR1/SQR3确认SQ1~SQn与L值;确认ScanConvMode=ENABLE、ContinuousConvMode按需、NbrOfConversion与DMA Buffer长度一致。其次看DMA请求映射:STM32的ADC规则组DMA请求由ADC_CR2的DMA位使能,HAL_ADC_Start_DMA内部会置位,但若DMA通道与外设请求映射选错(如F1/F4的DMA1_Channel1对应ADC1,F0/G0/L4的DMAMUX请求号不同),DMA只搬一次。再查DMA配置:MemoryInc=ENABLE、PeriphInc=DISABLE、DataWidth=HALFWORD、Mode=Circular/Normal与业务匹配。最后确认EOC/OVR:若DMA未及时取数导致OVR,后续转换停止,表现为只得到第一通道。建议用调试器观察ADC_DR与DMA CNDTR,逐步定位。
mcuku 阿沐 · 2026-10-31

🧰 配套工具

📊 ADC 转换