PWM配置是嵌入式开发的基础操作,可偏偏有人把定时器通道模式、GPIO复用功能反复核对了无数遍,示波器探头上依然是一条直线。问题往往不在这些明面上的寄存器,而是藏在几个容易被忽略的角落。

1. 高级定时器的主输出没开
这是最常见的坑。TIM1和TIM8属于高级定时器,比通用定时器多了一道保险:主输出使能位MOE。CubeMX里有个选项叫Master Output Enable,或者代码里需要调用TIM_CtrlPWMOutputs函数。这步漏了,PWM通道内部被硬件强制封锁,配再多参数也没用。
2. 死区时间没配,互补通道拖后腿
如果你启用了互补输出通道,比如TIM1_CH1N,但没有配置死区时间,MOE位同样不会真正生效。这是硬件层面的安全机制,不是Bug,而是设计规范。
3. 占空比值越界了
CCR寄存器的值必须严格满足:0小于CCR小于ARR。如果CCR等于0,输出恒低电平;如果CCR大于等于ARR,输出恒高电平。示波器上都是一条直线,看起来像“没波形”,其实是占空比跑到了极限。
4. 引脚被调试接口占用了
PA13和PA14默认是SWD调试引脚,如果你恰好把PWM通道映射到了这两个脚上,不关掉调试功能,引脚控制权根本交不出来。在CubeMX的SYS选项里把Debug模式改成Disable,问题往往就解决了。
5. 忘了调用启动函数
CubeMX生成的初始化代码只负责配置寄存器,不负责启动PWM输出。必须在主程序里显式调用HAL_TIM_PWM_Start,计数器才开始跑,通道输出才真正使能。这步漏掉,是现场调试中最高频的人为疏失。
本文凡亿教育原创文章,转载请注明来源!

扫码关注








































