1.介绍
??????? STM32的定时器通道输出矩形波,可以使用PWM模式和输出比较模式。PWM模式能够产生频率和占空比可调的矩形波信号,但不能对信号的相位进行调节。使用输出比较模式,可以实现信号的相位调节和频率调节,但不能对信号的占空比进行调节。
?????? 输出比较模式,是当计数器与比较寄存器数值相等时,做出相应动作。其运行模式由OCxM[2:0]控制,具体如下:
OCxM[2:0] | 功能 | 000 | 冻结,输出比较不起作用 | 001 | 设置为有效电平 | 010 | 设置为无效电平 | 011 | 翻转 | 100 | 强制为无效电平 | 101 | 强制为有效电平 | 110 | PWM模式1 | 111 | PWM模式2 |
??????? 使用输出比较模式,输出相位可调的矩形波,就需要设置输出模式为翻转。定时器检测到计数值与比较寄存器值相等时,翻转电平,产生矩形波。改变比较寄存器的数值就能改变相位大小,而频率保存不变。其输出波形关系图如下:

2.STM32CubeMx配置
???????? 任务:配置TIM1的CH1和CH2为输出比较模式,输出频率为1KHz。TIM1挂载时钟为120MHz。
1-setp:配置时钟源,设置CH1与CH2的模式。

2-setp:配置定时器分频数和计数值,在如下配置的数据下,计数频率=120M/12/5000=2000Hz,由于在输出比较模式下,两个比较点之间电平相同,因此最终输出频率还要除2,为1KHz。

?3-setp:配置工作模式和相位关系,工作模式为翻转,在如下配置数据下,CH1通道相位超前CH2,相差180度。

3.程序设置
??????? 使用HAL库,需要有开启函数,开启比较输出。
HAL_TIM_OC_Start(&htim1,TIM_CHANNEL_1);
HAL_TIM_OC_Start(&htim1,TIM_CHANNEL_2);
???? ? 在程序中修改相位,即对比较寄存器进行修改,使用函数如下:
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,0);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2,4999);
?4.输出结果
?????? 设置CH1超前CH2输出,超前相位为180度,频率为1KHz,输出波形如下:

?
?
?
?
|