STM32G031中TIM1 CH1 PWM为何触发TIM3 CH1输入捕获
问题
我是嵌入式软件开发新手,目前基于STM32G031C6T6 MCU编写简单代码学习相关知识,遇到一个排查很久未找到根因的问题:
- 配置TIM1通道1为PWM生成模式,输出到PA8引脚,单独测试功能运行正常
- 配置TIM3通道1为输入捕获模式,设置为捕获PA6引脚的上升沿
- 代码中通过以下两个接口启动对应定时器功能:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1); - 程序运行后出现异常:每次TIM1生成的PWM信号输出上升沿时,TIM3的输入捕获都会被触发
- 已完成排查验证:
- 硬件上确认PA8与PA6之间无物理连接
- 输入捕获通道已配置数字滤波,曾尝试将滤波参数设为最大值,可排除PWM通道噪声耦合触发的可能
- 补充测试:该异常仅在使能TIM3通道1输入捕获时出现,TIM3其余3个通道工作完全正常
- 附CubeMX配置截图:包含TIM3配置页、TIM1配置页
答案
这个问题的根因是TIM3通道1的捕获输入源被误配置为内部触发输入(TRC),未选择PA6引脚对应的直连TI1输入通道。
STM32通用定时器的每个输入捕获通道都支持三类输入源选择:
- 对应引脚直连的TIx通道(TIM3_CH1对应PA6的直连输入为TI1,是正常输入捕获需要选的源)
- 相邻通道的交叉输入(多用于单引脚测PWM周期、占空比的场景)
- 内部触发输入TRC:走定时器之间的内部互连信号,仅用于主从定时器同步场景,不连接外部GPIO
你的现象完全匹配该配置错误的特征:
- STM32G031系列中,TIM3的ITR0内部触发源默认对应TIM1的比较匹配事件,TIM1_CH1输出PWM上升沿的时刻刚好是通道比较匹配触发的时刻,内部触发信号会直接通过片上互连线送到TIM3的TRC端,不需要经过外部引脚就能触发捕获
- 你配置的外部引脚数字滤波只对GPIO进来的外部信号生效,内部走的TRC触发信号根本不经过滤波电路,所以把滤波参数开到最大也无法屏蔽该误触发
- 仅TIM3_CH1出现异常、其余通道工作正常,也符合单通道输入源配置错误的特征
修复方法
- 打开CubeMX的TIM3配置界面,找到通道1的配置项,将Input Capture Source(捕获输入源)从Internal Trigger(TRC)修改为Direct from TI1(TI1直连输入)
- 如果不重新生成代码,也可以直接在初始化代码中手动修改寄存器配置,将
TIM3->CCMR1寄存器的CC1S位域设置为0x01(即CH1配置为输入模式,映射到TI1直连通道),不要设置为0x03(即映射到TRC输入) - 重新编译下载程序即可恢复正常,无需修改硬件连线
内容的提问来源于stack exchange,提问作者LorenzoRigakonti91
相关产品推荐
相关产品推荐

