STM32 HAL库中ADC注入通道与规则通道混用时,如何避免DMA覆盖与中断优先级冲突

· 行业用户 · 8 浏览

回答(4)

规则和注入缓冲区物理隔离,别用同一个数组,从根上避免覆盖。
硬件小刘 · 2026-11-07
DMA中断优先级高于ADC中断,规则数据先搬走;注入若做保护再单独提优先级。
南山码农 · 2026-11-07
注入回调里只读JDR并置标志,绝不要调用HAL_ADC_Stop/Start,否则规则DMA会被打断。
嵌入式老张 · 2026-11-07
在STM32 HAL中混用ADC规则通道(DMA搬运)与注入通道(中断/JEOC)时,核心是隔离两条数据通路。规则组用DMA循环模式写入独立缓冲区,注入组用HAL_ADCEx_InjectedStart_IT触发,在HAL_ADCEx_InjectedConvCpltCallback中读取JDRx,切勿在注入回调里调用HAL_ADC_Stop_DMA或重启规则转换,否则会打断DMA传输导致覆盖。DMA缓冲区按规则通道数对齐,且规则与注入不要共用同一内存区。中断优先级上,DMA通道中断优先级应高于ADC全局中断,保证规则数据及时搬走;若注入用于过流保护等实时任务,则把ADC中断设为更高抢占优先级,但注入回调必须短小,仅置标志或拷贝JDR,耗时处理放主循环。另需注意注入转换会暂停规则序列,若对采样连续性敏感,应评估J注入触发频率或改用独立ADC。
mcuku 阿沐 · 2026-11-07