STM32多通道PWM输出异常:仅通道1有输出,通道2无输出求助
解决STM32 TIM3通道2无PWM输出的问题
你遇到的情况很常见——明明启动了两个PWM通道,却只有一个正常工作。下面是几个优先级从高到低的排查方向,你可以一步步验证:
1. 先补全通道2的CCR寄存器赋值
你只给TIM3->CCR1设置了25000,但通道2对应的是TIM3->CCR2寄存器。如果没给CCR2赋值,它的默认值是0,这意味着占空比为0,示波器自然看不到波形。赶紧加上这行代码:
TIM3->CCR2 = 25000;
这是最容易忽略的点,先把这个补上,大概率能解决问题。
2. 验证CubeMX的初始化配置是否正确
如果是用CubeMX生成的初始化代码,得确认通道2的配置没出错:
- 打开TIM3的配置页面,检查Channel 2的Mode是否设为
PWM Generation CH2(别不小心设成了输入捕获或者其他模式) - 查看通道2对应的GPIO引脚,必须配置为Alternate Function Push Pull(复用推挽输出),并且Alternate Function映射正确(比如TIM3在多数STM32型号里对应AF2)
- 确认TIM3的外设时钟已经在CubeMX里开启,没开时钟的话整个定时器都不会工作
3. 检查通道2的PWM模式与极性设置
启动通道只是第一步,还要确保模式配置正确:
- 查看
TIM3->CCMR1寄存器,通道2的模式位(OC2M)需要设置为PWM模式(比如PWM模式1是011,模式2是111),如果是其他模式,就不会输出正常的PWM - 检查极性位(OC2P),如果设置为低电平有效,可能你的示波器默认测高电平触发,会误以为没有输出,默认一般设为高电平有效更直观
4. 排查硬件连接问题
软件配置没问题的话,就得看硬件了:
- 确认你用的引脚确实是TIM3_CH2的对应引脚(不同STM32型号引脚映射不同,比如STM32F103C8T6的TIM3_CH2是PA7,STM32F407的是PB5)
- 检查引脚有没有虚焊、短路,或者被其他电路占用了
- 可以用万用表先测一下引脚的静态电平,再结合示波器看动态变化,排除硬件故障
5. 确认TIM的ARR寄存器值是否合理
PWM的周期由TIM3->ARR(自动重装载寄存器)决定,你的CCR值是25000,必须保证ARR的值≥25000,否则CCR会被截断,导致占空比异常。比如如果ARR是20000,那25000会被当成0处理,自然没有输出。你可以查看TIM3->ARR的实际值是否符合预期。
先从第一个方向开始排查,补全CCR2的赋值,这是最常见的疏漏。如果还是不行,再依次检查后面的点。
内容的提问来源于stack exchange,提问作者Nick Sun




