在工业采样、传感器数据采集等场景,常需定时器单个周期内两次触发 ADC 转换,且触发时间点灵活可调。传统单通道定时器无法实现该需求,而 STM32G4(含 H、U 系列)高级 / 通用定时器的组合 PWM 模式,可通过内部信号逻辑组合,无需额外硬件,即可完成单周期双触发。本文基于意法半导体 LAT1649 技术文档,从原理、配置、代码到验证,给出完整落地方案。
资料获取:经验分享 | LAT1649 利用TIMER的组合信号实现单个周期的两次触发
1. 需求背景:单周期双触发痛点
开发者使用 STM32G4 芯片时,提出核心需求:通用定时器单个计数周期内,触发 ADC 两次,且触发位置可自由调整。
传统方案局限:
- 单通道 PWM 仅能生成 1 路触发信号,无法实现双触发;
- 多定时器级联复杂度高,占用资源且触发时序难同步;
- 外部逻辑增加硬件成本,违背小型化设计需求。
STM32G4 定时器组合 PWM 模式,通过内部寄存器逻辑组合,完美解决该痛点,无需额外引脚与硬件。
2. 核心原理:组合 PWM 信号生成双触发
2.1 组合 PWM 模式定义
STM32G4 等系列定时器支持Combined PWM(组合 PWM)模式:单个输出通道(如 OC1),通过 ** 两个比较寄存器(CCR1/CCR)生成两路参考信号(REF1/REF2),经逻辑与(AND)/ 或(OR)** 组合,输出一路合成信号(OC1REFC)。
- 通道 1/2 为一组:OC1REFC = REF1 & REF2(模式 2)或 REF1 | REF2(模式 1);
- 触发输出(TRGO)可直接映射 OC1REFC,作为 ADC 触发源。
2.2 双触发实现逻辑
定时器计数周期内,CCR1、CCR2 分别设定两个不同比较值,生成两路 REF 信号;合成信号 OC1REFC 在上升沿 + 下降沿各触发一次,ADC 配置为双边触发,即可实现单周期两次转换,触发位置由 CCR1/CCR2 灵活调节。
3. CubeMX 实操配置(以 STM32G474+TIM3+ADC3 为例)
3.1 TIM3 定时器配置
- 时钟源:内部时钟,预分频(PSC)1699,自动重装载(ARR)7999;
- 通道 1:PWM 生成,模式设为Combined PWM2(逻辑与),脉冲值 3000;
- 通道 2:PWM 生成,模式 PWM1,脉冲值 5000;
- 触发输出(TRGO):选择OC1REFC,作为 ADC 触发源。
3.2 ADC3 配置
- 分辨率:12 位,扫描模式关闭;
- 外部触发:定时器 3 TRGO,双边触发(上升 + 下降);
- 通道:Vrefint(内部参考电压),采样时间 247.5 周期;
- DMA:开启,Normal 模式,数据宽度字,搬运长度 6。
4. 关键代码实现
4.1 定时器与 ADC 初始化
// TIM3初始化(CubeMX自动生成)
TIM_HandleTypeDef htim3;
// ADC3初始化(CubeMX自动生成)
ADC_HandleTypeDef hadc3;
// ADC结果缓存
uint32_t ADC_Result[6] = {0};
// 启动定时器与ADC
void Start_ADC_Double_Trigger(void)
{
HAL_ADCEx_Calibration_Start(&hadc3, ADC_SINGLE_ENDED); // ADC校准
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // 开启通道1
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); // 开启通道2
HAL_ADC_Start_DMA(&hadc3, ADC_Result, 6); // ADC+DMA启动
HAL_TIM_Base_Start(&htim3); // 启动定时器
}
4.2 触发完成回调(可选)
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
if(hadc->Instance == ADC3)
{
// 单周期两次转换结果存入ADC_Result[0]、ADC_Result[1]
}
}
5. 验证结果
下载程序至 NUCLEO-G474 开发板,调试查看 ADC_Result 数组:
- 单周期内成功生成两组有效转换数据;
- 调整 CCR1/CCR2 数值,触发时间点同步变化;
- 无额外硬件占用,时序精准无延迟。
6. 避坑关键要点
- 模式匹配:定时器必须选Combined PWM 模式,普通 PWM 无法生成合成信号;
- 触发极性:ADC 务必配置双边触发,否则仅单次触发;
- CCR 配置:CCR1、CCR2 需小于 ARR,且数值不同,避免触发点重合;
- 芯片适配:仅 STM32G4/H/U 等高级定时器支持组合 PWM,F 系列早期芯片不支持;
- DMA 设置:搬运长度≥2,确保两次转换数据完整存储。
STM32G4 定时器组合 PWM 模式,为单周期两次 ADC 触发提供极简方案,无需额外硬件,仅通过寄存器配置即可实现触发时间灵活可调。该方案资源占用少、时序精准、成本低,广泛适用于工业采样、电源监测、多通道传感器同步采集等场景,同样适配 STM32H、U 系列高级定时器,是嵌入式高精度采样的优选方案。
532