扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

STM32 TIMER 触发 ADC 分组转换:一次触发只转 1 通道,不乱序、不丢数

03/17 11:31
454
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在 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 做了大量验证,结果非常明确:

  1. 触发频率正常时:定时器来几次触发,ADC 就转几次,顺序不乱、数据正常。
  2. 触发频率 > ADC 转换速度时
  • 多余的触发直接丢弃
  • 已启动的转换正常完成
  • 通道顺序绝对不乱
  • 只会少几个数据,不会错乱
  1. 触发极快时:ADC 只转最前面 1~2 个通道,后面触发全部忽略,但依然不乱序。

5. 最实用的工程结论(直接记)

  1. 要实现定时器一次触发转 1 个 ADC 通道 → 开 间断模式 + DISCNUM=1
  2. 触发源用 TIMx_TRGO,硬件同步最稳
  3. ADC 正在转换时,新触发会被丢弃,但不会乱序
  4. 设计时保证:定时器触发周期 > 单通道总转换时间,就不会丢触发
  5. 多通道轮流采样、分时触发,用这套方案最稳定

STM32 的 ADC 间断转换模式,就是为 “定时器分组触发” 量身定做。

LAT1362 已经帮你验证清楚:

一次触发转 1 通道可行、触发过快不乱序、只会丢触发不会乱数据。

只要配置正确,这是多通道定时采样最可靠、最简洁的硬件方案,不用 CPU 干预,效率极高。

相关推荐