在 STM32 多通道 ADC 采集里,很多人都有这样的需求:
用定时器定时触发,但不希望一次触发扫完所有通道,而是一次触发只转 1 个,轮流转换。
同时担心:转换没做完又来触发,会不会丢触发、数据乱掉?
ST 官方应用笔记 LAT1362 直接给出标准答案:用 ADC 间断转换模式(Discontinuous Mode)+ TIM 定时器 TRGO 触发,完美实现 “一次触发、转 1 个通道”,而且触发过快只会丢弃触发,不会乱序。
本文把原理、配置、验证、注意事项一次性讲透,直接可用于电机控制、仪表、多通道采样项目。
资料获取:【应用笔记】LAT1362 利用STM32 TIMER触发ADC实现分组转换
1. 你最关心的 2 个问题(官方明确答复)
1. 定时器每触发 1 次,只转换 1 个通道,可行吗?
✅ 可行!使用 ADC 间断转换模式,设置每次触发转换 1 通道 即可。
2. 转换中又来了触发,会丢触发吗?数据会乱吗?
✅ 触发会被忽略丢弃,但转换顺序绝对不乱,ADC 没有触发缓存机制,正在转换时新来的触发直接无效。
2. 核心机制:ADC 间断转换模式(Discontinuous Mode)
这是 STM32 ADC 专为 “分组触发” 设计的功能:
- 把你的通道序列分成若干小组
- 每次触发只转换1 小组(可设 1~8 个)
- 转完一组就停,等下一次触发
- 全部通道转完一轮后自动从头开始
比如:
通道:CH0 → CH1 → CH2 → CH3
每组 1 通道:
触发 1 → CH0
触发 2 → CH1
触发 3 → CH2
触发 4 → CH3
触发 5 → CH0 ……
3. STM32CubeMX 关键配置(照着设就对)
以 STM32G474 + ADC1 + TIM1 触发为例:
3.1 ADC 核心配置
- Scan Conversion Mode:Enabled
- Continuous Conversion:Disabled
- Discontinuous Mode:Enabled
- Number Of Discontinuous Conversions:1(一次触发只转 1 个)
- External Trigger:Timer 1 Trigger Out event(TRGO)
- Trigger Edge:Rising Edge
- 多通道按顺序填入 Rank
3.2 TIM1 配置
- 时基按你的采样周期配置
- Trigger Out 选择:Update Event
- 不用开定时器中断,靠硬件 TRGO 触发 ADC
3.3 DMA 配置(推荐)
- ADC 开启 DMA
- 模式:Normal 或 Circular 都行
- 用于自动搬运转换结果
4. 官方实测结论(非常重要)
LAT1362 做了大量验证,结果非常明确:
- 触发频率正常时:定时器来几次触发,ADC 就转几次,顺序不乱、数据正常。
- 触发频率 > ADC 转换速度时
- 多余的触发直接丢弃
- 已启动的转换正常完成
- 通道顺序绝对不乱
- 只会少几个数据,不会错乱
- 触发极快时:ADC 只转最前面 1~2 个通道,后面触发全部忽略,但依然不乱序。
5. 最实用的工程结论(直接记)
- 要实现定时器一次触发转 1 个 ADC 通道 → 开 间断模式 + DISCNUM=1
- 触发源用 TIMx_TRGO,硬件同步最稳
- ADC 正在转换时,新触发会被丢弃,但不会乱序
- 设计时保证:定时器触发周期 > 单通道总转换时间,就不会丢触发
- 多通道轮流采样、分时触发,用这套方案最稳定
STM32 的 ADC 间断转换模式,就是为 “定时器分组触发” 量身定做。
LAT1362 已经帮你验证清楚:
一次触发转 1 通道可行、触发过快不乱序、只会丢触发不会乱数据。
只要配置正确,这是多通道定时采样最可靠、最简洁的硬件方案,不用 CPU 干预,效率极高。
454