本次博客主要参考STM32战舰例程。
脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制 。
在本文中,小白将向大家介绍如何用通用定时器通道来输出PWM。定时器的工作过程如下图所示,在上一次博客“STM通用定时器详解”中,小白已经介绍了关于时基单元,并完成了对通用定时器的配置以及定时器中断的使用。如果没有定时器知识小伙伴,可以先去看一下小白的上一次博客。
**
PWM工作过程
**
在PWM 输出中,输出信号由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比。
如图所示,PWM 的输出可以简单的理解为:(为了便于理解)
计数器CNT向上计数(从0—ARR),每次计数都与CCRx的值进行比较。当CNT<CCRx时,定时器通道输出 低电平;当CNT>CCRx时,定时器通道输出 高电平。当CNT=ARR后,计数器CNT重新从0开始计数,这样就输出一个脉冲。上面所说的:
TIMx_ARR寄存器确定频率: 是指在预分频系数PSC与计数器CNT时钟确定的情况下,ARR的值越大,输出信号的周期越长,即频率越小。
TIMx_CCRx寄存器确定占空比:占空比是指高电平在一个周期之内所占的时间比率 .方波的占空比为50%,占空比为0.5。即我们可以通过修改CCRx的值来改变高电平出现的时间,即改变占空比。
**
代码实现
**
void TIM3_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure; //参数的结构体变量
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;