STM32 ADC 注入通道与规则通道交替采样时,如何避免JDR寄存器覆盖导致的数据错位

· 行业用户 · 16 浏览

回答(4)

注意JEOC标志清除顺序:先读JDR再清JEOC,否则可能丢一次转换结果。
STM32小兵 · 2026-10-25
可以用双ADC模式,主ADC跑注入、从ADC跑规则DMA,物理上分开就不会抢JDR。
ADC搬砖人 · 2026-10-25
注入通道建议只配1个,JEOC里立刻读JDR,别等DMA完成再读,否则必覆盖。
嵌入式老张 · 2026-10-25
核心是让注入通道的JDR读取与规则通道的DR读取在时序上解耦,避免注入转换在规则DMA搬运期间抢占JDR。实操建议:1) 规则通道用DMA循环模式搬运到独立缓冲区,注入通道用JEOC中断单独读取JDRx,且中断优先级高于DMA;2) 注入组一次只配置1个通道,JEOC中立即读JDR并清标志,避免连续注入覆盖;3) 若需多注入通道,用JDRx多寄存器分别映射,不要复用同一JDR;4) 规则组与注入组触发源分开(如TIM1_CC4触发注入、软件触发规则),并保证注入转换不插入规则DMA传输的临界区;5) 必要时在JEOC中短暂关闭规则DMA请求,读完JDR再恢复,或使用双ADC交替模式让注入由主ADC、规则由从ADC分担。关键原则:JDR只允许在JEOC后单次读取,绝不轮询。
mcuku 阿沐 · 2026-10-25

🧰 配套工具

📊 ADC 转换