脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术简单来说,就是对脉冲宽度的控制原理图如下:
当CNT<CCRx时,输出0反之,则输絀1因此可以输出如上的PWM示意图。当CNT达到CCRx时重新归零,然后再向上计数依次循环。通过改变CCRx的值就可以改变PWM的输出占空比,改变ARR的徝就可以改变PWM输出的频率,这就是PWM输出的原理
值得一提的是控制PWM的三个寄存器:捕获/比较模式寄存器(TIMx_CCMR1/2),捕获/比较使能寄存器(TIMx_CCER)捕获/比较寄存器(TIMx_CCR1~4)。这三个寄存器针对不同的定时器不同的输出模式设置各不相同具体可参见STM32中文参考手册16节
使用PWM与使用定时器的功能实际上使类似的。
在库函数中PWM通道的设置是通过函数TIM_OC1Init()~TIM_OC4Init()来设置的,不同的通道设置不一样这里我们使用的是通道1,所以使用的函数昰TIM_OC1Init()
通过程序我们可以看到,我们通过修改led0pwmval的值来改变占空比来实现stm32呼吸灯实验报告。当占空比高的时候LED灯点亮的时间长,显得就亮反之则暗,
利用依次递增递减就可以实现呼吸的效果