STM32F407ZGT6学习之定时器PWM波输出

  • Post author:
  • Post category:其他


工程代码:

https://pan.baidu.com/s/1Qlfg1_br0tN6yy0fcDwCjg

,密码:fhh2


(一)概述

STM32F407有三种类型的定时器,分别是基本定时器、通用定时器、高级定时器。定时器的PWM波输出是通用定时器、高级定时器才有的功能,PWM波的输出驱动,是在基本定时器的基础功能上,把定时器的计数器与一个比较值进行比较,输出高电平或者低电平的过程。

(二)通用定时器框架

通过图中可以看出,图中上半部分是基本计数器的功能(通用定时器与基本定时器的计数器功能差别在于多了几种时钟输入的方式),图中下半部分是通过定时器的”捕获输入/比较输出通道“(TIMx_CH1或TIMx_CH2),通过把”捕获输入/比较输出通道“配置为”比较输入“通道后,”CNT计数器“与”捕捉/比较寄存器“对比之后,TIMx_CH1或者TIMx_CH2通道就会输出高电平或者低电平。


(三)寄存器介绍



关于通用定时器的寄存器有十几个,关于定时器计数功能的寄存器,之前的文章已经提到过,这里主要说一下PWM波输出需要用到的寄存器。

①TIMx_CCMR1寄存器这里主要配置定时器的通道属性,CCMR1的CCxS位配置通道为”捕捉输入“或”比较输出“,CCMR1的OCxM位配置”CNT计数器“与”捕捉/比较寄存器“比较输出结果。

②TIMx_CCER寄存器配置通道的输出和使能

③TIMx_CCR是捕获/比较寄存器,设置捕获/比较寄存器的值,与计数器的值进行比较,根据比较结果输出高电平/低电平


(四)呼吸灯概述

利用定时器的PWM输出实行呼吸灯功能。

定时器每次更新的周期固定,改变一定周期内LED灯亮度/灭灯时间比例,使LED灯看起来好像在呼吸一样。

思路大概是:配置好基本计数器功能,自动重载寄存器TIMx_ARR的值不能配置太大(太大会导致切换亮度/灭灯时间比例的时间过长,使LED看起来一直在闪烁),配置定时器为PWM波输出,通过CCMR1的OCxM位配置”110 PWM模式1”,TIMx_CCR的值初始为1,之后每次定时进入中断时,重新配置TIMx_CCR的值递增,这样亮灯的时间占整个计数器的周期的比例越来越长,当TIMx_CCR的值与TIMx_ARR的值相等时,开始递减TIMx_CCR的值,使亮灯的时间占整个计数器的周期的比例越来越短,这样LED呈现的效果就是先慢慢变亮,然后慢慢变暗,一直重复,达到了呼吸灯的效果。



版权声明:本文为Q_fighting原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。