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 末尾加了分号!!!
正确位置在{ }
内!!!!