STM32 ADC注入通道与规则通道交替采样时DMA搬运错位的排查思路

· 行业用户 · 13 浏览

回答(4)

先量ADC_DR写入时刻与DMA请求时序,错位固定就查SQR1长度,漂移就查触发源冲突。
STM32玩家 · 2026-11-01
用DMA双缓冲加规则组定长搬运,注入通道单独中断处理,能避开EOC竞争问题。
嵌入式小刘 · 2026-11-01
重点看JDMA位和JDRx读取方式,注入组走DMA基本都会错位,建议注入只用中断读JDR1。
硬件老张 · 2026-11-01
先确认注入通道是否触发了DMA请求:STM32的ADC注入通道默认不参与规则组的DMA搬运,若误开ADC_CR2的JDMA或把注入结果映射到规则数据寄存器,就会导致DMA指针与规则序列错位。排查步骤:1)检查ADC_CR1/CR2配置,确认DMA仅使能规则组(DMAEN),注入组用独立JDRx读取;2)核对规则序列长度SQR1.L与DMA缓冲区大小、外设数据宽度是否一致,避免半字/字错配;3)用调试器观察ADC_DR与DMA目标数组,确认错位是固定偏移还是随机漂移,固定偏移多为序列长度或触发源配置错误,随机漂移多为注入转换抢占规则转换导致EOC时序异常;4)检查注入触发是否与规则触发同源,避免注入转换插入规则序列中间;5)必要时改用定时器触发+双缓冲,或把注入结果单独用中断读取,彻底隔离两条数据通路。
mcuku 阿沐 · 2026-11-01

🧰 配套工具

📊 ADC 转换