本章介绍STM32定时器PWM模式的使用方法。STM32的定时器有多路PWM输出通道,可以配置多路同时输出不同占空比的PWM波。
前期准备:
- STM32硬件电路板及仿真器(以STM32F072C8单片机为例)
- Keil v5以上版本(MDK-ARM)
首先新建工程后,配置系统时钟为48MHz(具体步骤参考之前的文章)。配置TIM3的时钟为内部时钟,Channel1和Channel2两通道为PWM输出模式,配置完后可以看到相应的GPIO也会显示为TIM3_CH1和TIM3_CH2。TIM3基本定时参数的设置可参考上一篇文章STM32CubeMx之TIM定时中断。假设设置CH1的PWM频率为10kHZ,占空比为30%,CH2的频率为10kHz,占空比为40%,则设置参数如下图。
PWM频率 = TIM分频后的频率 / 计数周期 = 48MHz / 4800=10kHz。
PWM占空比 = Pluse / Counter Period。
CH1和CH2可以单独设置。
PWM模式有mode1和mode2两种模式,其区别在于:
- PWM mode1 计数值大于比较值,输出有效电平,否则输出无效电平。
- PWM mode2 计数值大于比较值,输出无效电平,否则输出有效电平。
其中有效电平即为CH Polarity所设置的电平。
需要说明的是有的定时器的输出通道可以影视到不同的IO口上,用户可以自己选择,上图中选择TIM3的通道1和通道2后,默认的PB3和PB4端口被设置为TIM3_CH1和TIM3_CH2功能。实际上,TIM3的通道1和通道2也可以映射到PA6和PA7上,用户可以手动更改。
设置完成后点击 Generate Code生成代码。
可以看到TIM3的初始化已经自动生成,在后面添加PWM启动的代码即可,如下图。
如果需要改变PWM的频率和占空比,调用以下函数。
编译程序后,下载到电路板,用示波器观察相应引脚的波形。
可以看到频率是10.080kHz(由于使用的内部RC时钟,有一定误差),占空比39.999%,说明程序没有问题。