STM32F103C8T6定时器1PWM输出失效问题求助
STM32F103C8T6定时器1PWM输出失效问题求助
兄弟,你碰到的这个坑我太熟了!之前帮好几个做STM32项目的朋友排查过一模一样的问题——高级定时器TIM1和通用定时器TIM2/3/4的PWM输出逻辑真的不一样,核心就是这几点:
必须开启主输出使能位(MOE)
TIM1属于高级定时器,它所有通道的PWM输出都受BDTR寄存器里的MOE位(Bit15)控制,默认这个位是0,相当于把所有输出通道都“锁死”了!而你之前用的TIM2/3/4是通用定时器,没有这个额外的使能要求,移植代码的时候很容易漏掉这一步。
举个例子,如果你用的是标准库,要在配置完PWM模式后加一行:TIM1->BDTR |= TIM_BDTR_MOE; // 开启TIM1主输出使能用HAL库的话就是:
__HAL_TIM_MOE_ENABLE(&htim1);再确认一遍GPIO复用配置
虽然你说调试看到输出比较在工作,但还是要核对下PA8/9/10的GPIO配置:必须设为复用推挽输出模式,别写成普通推挽输出了——普通推挽模式下,GPIO是直接受ODR寄存器控制,不会和定时器的PWM输出挂钩,这也是新手常犯的小错误。死区/互补输出的小细节
你说忽略了死区和互补输出,其实只要你没刻意开启互补输出通道(比如CCMRx寄存器里的OCxM配置的是普通PWM模式),这块影响不大,但如果之前误碰了BDTR里的其他位,也可以把BDTR寄存器除了MOE之外的位都清掉试试,避免干扰。
最后给你个调试小技巧:用调试器查看TIM1的BDTR寄存器,确认MOE位是不是被成功置1了;同时看下对应GPIO的ODR寄存器,看看定时器输出有没有正确映射到引脚上。
内容来源于stack exchange
相关产品推荐
相关产品推荐

