一、通用定时器输出比较部分框图介绍
输出比较部分主框图如下:
1、 捕获/比较通道1的主电路---输出部分
图中,灰色部分为输入的,右边为输出的。
捕获/比较预装载寄存器就是主框图里边的捕获/比较1寄存器,捕获/比较1寄存器的影子寄存器就是图中的捕获比较影子寄存器,影子寄存器是没有读写权限的。
一般首先由程序员写入捕获/比较寄存器的值,也就是CCR1。然后捕获/比较寄存器的值会转移到捕获/比较影子寄存器里边。捕获/比较影子寄存器的值与计数器的值进行比较。比较的结果来到输出控制部分。
捕获/比较寄存器的值在compare_transfer为1的时候才会转移到影子寄存器里边。第一个条件就是当写入CCR1H或者CCR1L时候,writing_in_progress为1,经过一个非,就是0,再经过与门结果为0,也就是说在写入捕获/比较寄存器的时候,值不会转移到影子寄存器里边。第二个条件为CC1S[0]和CC1S[1],这两位为配置通道1是输出还是输入,如果配置成输出,那么这两位都是0,则经过或非门以后结果为1。第三个条件为设置OC1PE位,这个位是设置捕获/比较寄存器是否有缓冲功能,如果设置成0,则无缓冲功能,经过一个非门,在经过一个或门则结果为1,那么捕获/比较寄存器的值会立即转移到影子寄存器里边。反之如果设置的是1,就是有缓冲功能,不会立即转移到影子寄存器里边。当UEV为1的时候,就是发生了更新事件的时候,才能转移到影子寄存器里边。
2、输出控制部分
首先将通道配置成输出模式,也就是将TIMx_CCMR1的CC1S[1:0]位配置为00。
第二步就是设置输出比较模式,设置TIM_CCMR1寄存器的CO1M[2:0]位,对于PWM功能有两个模式,一个是PWM模式1,另一个是PWM模式2。
第三步是配置强制清零功能,这个一般不用。强制清零就是看ETR引脚电平,如果设置了OC1CE位,那个就是开启强制清零功能,一旦ETRF为高电平,则OC1REF直接输出0。
OC1REF称为输出参考信号,受ETRF强制清零控制、输出比较模式选择、还有前面的比较输出值影响。确定了OC1REF信号后。来到了极性选择器,设置TIM_CCER寄存器的CC1P位,如果设置成1,则低电平有效,因为高电平过来经过一个反相器为低电平,则输出低电平,低电平过来,经过反相器变成高电平,则输出高电平。
最后开启输出使能位,TIM_CCER寄存器的CC1E位,设置为1。
二、通用定时器输出PWM原理
计数器的值随着时间的增加而递增,当计数器的值小于捕获/比较寄存器的值的时候,IO输出值为0,当计数器的值大于捕获/比较影子寄存器值得时候,IO口输出高电平。到达ARR寄存器值得时候从0重新开始递增。
总结:ARR寄存器决定频率或者周期,CCRX捕获/比较寄存器决定PWM占空比。
三、PWM模式
PWM模式1:设置TIMX_CCMR1寄存器的OC1M[2:0]为110,在向上计数时,一旦TIMXCNT<TIMXCCR1时通道1为有效电平