STM32定时器的预装载寄存器与影子寄存器之间的关系(3)
- UID
- 1029342
- 性别
- 男
|
STM32定时器的预装载寄存器与影子寄存器之间的关系(3)
4.重复计数器前面解释了计数器上溢/下溢时更新事件(UEV)是如何产生的,然而事实上它只能在重复计数达到0的时候产生。这个特性对产生PWM信号非常有用。
这意味着在每N次计数上溢或下溢时,数据从预装载寄存器传输到影子寄存器(TIMx_ARR自动重载入寄存器,TIMx_PSC预装载寄存器,还有在比较模式下的捕获/比较寄存器TIMx_CCRx),N是TIMx_RCR重复计数寄存器中的值。
重复计数器在下述任一条件成立时递减:
● 向上计数模式下每次计数器溢出时,
● 向下计数模式下每次计数器下溢时,
●中央对齐模式下每次上溢和每次下溢时。虽然这样限制了PWM的最大循环周期为128,但它能够在每个PWM周期2次更新占空比。在中央对齐模式下,因为波形是对称的,如果每个PWM周期中仅刷新一次比较寄存器,则最大的分辨率为2xTck。
重复计数器是自动加载的,重复速率是由TIMx_RCR寄存器的值定义。当更新事件由软件产生(通过设置TIMx_EGR中的UG位)或者通过硬件的从模式控制器产生,则无论重复计数器的值是多少,立即发生更新事件,并且TIMx_RCR寄存器中的内容被重载入到重复计数器。
下图为不同模式下更新速率的例子,及TIMx_RCR的寄存器设置
重复计数器各位的描述如下:
位15:8 保留位,始终读为0。
位7:0 REP[7:0]: 重复计数器的值 (Repetition counter value)开启了预装载功能后,这些位允许用户设置比较寄存器的更新速率(即周期性地从预装载寄存器传输到当前寄存器);如果允许产生更新中断,则会同时影响产生更新中断的速率。
每次向下计数器REP_CNT达到0,会产生一个更新事件并且计数器REP_CNT重新从REP值开始计数。由于REP_CNT只有在周期更新事件U_RC发生时才重载REP值,因此对TIMx_RCR寄存器写入的新值只在下次周期更新事件发生时才起作用。这意味着在PWM模式中,(REP+1)对应着:
- 在边沿对齐模式下,PWM周期的数目;
- 在中心对称模式下,PWM半周期的数目;
5.控制寄存器1控制寄存器1各位的描述如下:
位15:10 保留,始终读为0。
位9:8 CKD[1:0]:时钟分频因子 (Clock division)
这2位定义在定时器时钟(CK_INT)频率、死区时间和由死区发生器与数字滤波器(ETR,TIx)所用的采样时钟之间的分频比例。
00:tDTS = tCK_INT
01:tDTS = 2 x tCK_INT
10:tDTS = 4 x tCK_INT
11:保留,不要使用这个配置
位7 ARPE:自动重装载预装载允许位 (Auto-reload preload enable)
0:TIMx_ARR寄存器没有缓冲;
1:TIMx_ARR寄存器被装入缓冲器。
位6:5 CMS[1:0]:选择中央对齐模式 (Center-aligned mode selection)
00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。
01:中央对齐模式1。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,只在计数器向下计数时被设置。
10:中央对齐模式2。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,只在计数器向上计数时被设置。
11:中央对齐模式3。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,在计数器向上和向下计数时均被设置。
在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式。
位4 DIR:方向 (Direction)
0:计数器向上计数;
1:计数器向下计数。
当计数器配置为中央对齐模式或编码器模式时,该位为只读。
位3 OPM:单脉冲模式 (One pulse mode)
0:在发生更新事件时,计数器不停止;
1:在发生下一次更新事件(清除CEN位)时,计数器停止。
位2 URS:更新请求源 (Update request source)
软件通过该位选择UEV事件的源
0:如果使能了更新中断或DMA请求,则下述任一事件产生更新中断或DMA请求:
−计数器溢出/下溢
−设置UG位
−从模式控制器产生的更新
1:如果使能了更新中断或DMA请求,则只有计数器溢出/下溢才产生更新中断或DMA请求
位1 UDIS:禁止更新 (Update disable)
软件通过该位允许/禁止UEV事件的产生
0:允许UEV。更新(UEV)事件由下述任一事件产生:
−计数器溢出/下溢
−设置UG位
−从模式控制器产生的更新 具有缓存的寄存器被装入它们的预装载值。(更新影子寄存器)
1:禁止UEV。不产生更新事件,影子寄存器(ARR、PSC、CCRx)保持它们的值。如果设置了UG位或从模式控制器发出了一个硬件复位,则计数器和预分频器被重新初始化。
位0 CEN:使能计数器 (Counter enable)
0:禁止计数器;
1:使能计数器。
在软件设置了CEN位后,外部时钟、门控模式和编码器模式才能工作。触发模式可以自动地通过硬件设置CEN位。
6.事件产生寄存器位15:8 保留,始终读为0。
位7 BG:产生刹车事件 (Break generation)该位由软件置’1’,用于产生一个刹车事件,由硬件自动清’0’。
0:无动作;
1:产生一个刹车事件。此时MOE=0、BIF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。
位6 TG:产生触发事件 (Trigger generation)该位由软件置’1’,用于产生一个触发事件,由硬件自动清’0’。
0:无动作;
1:TIMx_SR寄存器的TIF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。
位5 COMG:捕获/比较事件,产生控制更新 (Capture/Compare control update generation)该位由软件置’1’,由硬件自动清’0’。
0:无动作;
1:当CCPC=1,允许更新CCxE、CCxNE、OCxM位。
该位只对拥有互补输出的通道有效。
位4 CC4G:产生捕获/比较4事件 (Capture/Compare 4 generation) 参考CC1G描述。
位3 CC3G:产生捕获/比较3事件 (Capture/Compare 3 generation) 参考CC1G描述。
位2 CC2G:产生捕获/比较2事件 (Capture/Compare 2 generation) 参考CC1G描述。
位1 CC1G:产生捕获/比较1事件 (Capture/Compare 1 generation)该位由软件置’1’,用于产生一个捕获/比较事件,由硬件自动清’0’。
0:无动作;
1:在通道CC1上产生一个捕获/比较事件:
若通道CC1配置为输出: 设置CC1IF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。
若通道CC1配置为输入:当前的计数器值被捕获至TIMx_CCR1寄存器;设置CC1IF=1,若开启对应的中断和DMA,则产生相应的中断和DMA。
若CC1IF已经为1,则设置CC1OF=1。
位0 UG:产生更新事件 (Update generation) 该位由软件置’1’,由硬件自动清’0’。
0:无动作;
1:重新初始化计数器,并产生一个更新事件。注意预分频器的计数器也被清’0’(但是预分频系数不变)。若在中心对称模式下或DIR=0(向上计数)则计数器被清’0’;若DIR=1(向下计数)则计数器取TIMx_ARR的值。
关于刹车事件,触发事件,捕获比较事件的描述,详见数据手册13章 |
|
|
|
|
|