标题: STM32定时器输出比较。 [打印本页]

作者: LiUCONG520    时间: 2020-4-18 21:02
标题: STM32定时器输出比较。
刚来论坛学习STM32,这几天刚学习了定时器输出比较,调试多路PWM输出,频率占空比可调,用的是STM32F407.记录分享一下。

我用的定时器1  输出比较有4个通道 也有四种模式 STM32参考资料里说明了:

将为相应的输出引脚分配一个可编程值,该值由输出比较模式(TIMx_CCMRx 寄存器
中的 OCxM 位)和输出极性(TIMx_CCER 寄存器中的 CCxP 位)定义。匹配时,输
出引脚既可保持其电平 (OCXM=000),也可设置为有效电平 (OCXM=001)、无效电平
(OCXM=010) 或进行翻转 (OCxM=011)。


标准库里面是这样定义的:

#define TIM_OCMode_Timing                  ((uint16_t)0x0000)
#define TIM_OCMode_Active                  ((uint16_t)0x0010)
#define TIM_OCMode_Inactive                ((uint16_t)0x0020)
#define TIM_OCMode_Toggle                  ((uint16_t)0x0030)


我用到的是翻转模式,TIM_OCMode_Toggle,就是当比较通道里面的值和定时器里面的值相同时,比较通道的电平会翻转,只需要计算脉冲的周期,然后根据占空比计算出高电平的时间和低电平的时间,然后先将比较通道的值设置成高电平的时间,开启捕获比较中断,定时器的值和通道值相等时,进入中断,然后再把比较寄存器的值设为低电平的值,如此反复就可以实现多路PWM输出了。

调试过程中,我不想通道有脉冲输出时,我将比较通道的值设成0或者比定时器装载值大的数,还是会有频率很低脉冲输出。那我想输出频率为0的时候就把通道关闭。







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1