KST-STM32学习之通用定时器的输出比较产生PWM

1、STM32的通用定时器

STM32F103ZE 拥有 TIM2、TIM3、TIM4 和 TIM5 共 4 个通用定时器
这 4 个定时器除了具备基本定时器的向上计数器功能外,还可以向下、向上/向下计数
此外还具备独立通道,能够实现输入捕获输出比较PWM 输出单脉冲输出等功能。

2、PWM功能的几种实现

①、硬件实现。比如STM32 自带的 PWM 输出功能就是通过输出比较模式设定占空比信号,
进而通过硬件控制通道引脚的电平状态。
注意了,硬件实现的时候,外部接线需要接到通用定时器的外部通道上!

②、通用定时器的输出比较实现软件的PWM。

③、单纯的定时器计数实现PWM。

注:②③感觉上是差不多,只是具体的实现略有不同而已!而且②的实现比③要精确多!

3、输出比较

每个通用定时器拥有4路捕获/比较通道。

每路通道都有一个捕获/比较寄存器(TIMx_CCRx)用于装载初值。
同时该寄存器包含两个寄存器,一个是供用户写入比较值的,另一个是和计数器比较的当前捕获/比较寄存器

捕获/比较模式寄存器 x(TIMx_CCMRx)中有输出比较预装载使能位(OCxPE ),开启后只有当更新时间到来时, TIMx_CCRx寄存器的比较值,才会传入到当前捕获/比较寄存器。否则写入的比较值将立即生效。

当计数器和捕获/比较模式寄存器 x(TIMx_CCMRx)一样时,会发生什么呢?
①、假如此时设置了事件产生寄存器(TIMx_EGR)中的 CCxG 位,会产生一个捕获/比较事件
②、设置了相应的中断使能位TIMx_DIER 寄存器中的 CCxIE 位,则会产生一个捕获/比较中断

4、分频重载一点没想到

RGB彩灯程序的阅读过程中,到了这两行代码,卡了半天不明所以。
这里写图片描述

回头重新审视第三章的内容,才发现忽略了某些东西!

这里写图片描述

说白了,所谓x分频就是,每经过x个CK_PS周期计数器寄存器加一次1!

那么对应到这个实例,也就不难理解了。定时周期10ms,分成256级(重载值255),那么每一级(每计一次数)需要,10ms/256 = 39us…..
对应写程序,重载值255,关键是这个分频值。72*36-1…..


mmp,记一次编程教训。。。竟然在define 末尾加了分号!!!

这里写图片描述

正确位置在{ }内!!!!

猜你喜欢

转载自blog.csdn.net/ReCclay/article/details/81235107
今日推荐