微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32定时器详解 -----影子寄存器,预装寄存器

STM32定时器详解 -----影子寄存器,预装寄存器

时间:11-26 来源:互联网 点击:

为触发操作

例如,要配置在ETR下每2个上升沿计数一次的向上计数器,使用下列步骤:

1.本例中不需要滤波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000

2.设置预分频器,置TIMx_SMCR寄存器中的ETPS[1:0]=01

3.选择ETR的上升沿检测,置TIMx_SMCR寄存器中的ETP=0

4.开启外部时钟模式2,写TIMx_SMCR寄存器中的ECE=1

5.启动计数器,写TIMx_CR1寄存器中的CEN=1

计数器在每2个ETR上升沿计数一次。

在ETR的上升沿和计数器实际时钟之间的延时取决于在ETRP信号端的重新同步电路。

下图为外部时钟模式2下的控制电路

如图,该图为STM32的时钟树,结合高级控制定时器框图,我们可以看出,高级定时器的时钟不是直接来自APB2,而是来自于输入为APB2的一个倍频器。

当APB2的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB2的频率;当APB2的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个分频器起作用,定时器的时钟频率等于APB2的频率相应倍数。

假定AHB=36MHz,因为APB2允许的最大频率为72MHz,所以APB2的预分频系数可以取任意数值;当预分频系数=1时,APB2=72MHz,TIM1和TIM8的时钟频率=72MHz(分频器不起作用);当预分频系数=2时,APB1=36MHz,在倍频器的作用下,TIM1和TIM8的时钟频率=72MHz。

有人会问,既然需要TIM1和TIM8的时钟频率为72MHz,为什么不直接取APB2的预分频系数=1?答案是:APB2不但要为TIM1和TIM8提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM1和TIM8仍能得到较高的时钟频率。

再举个例子:当AHB=72MHz时,APB2因为其他设备需要,时钟为36MHZ,因为这个倍频器,TIM1和TIM8仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。

高级定时器寄存器简介

可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。 计数器、自动装载寄存器和预分频器寄存器可以由软件读写,即使计数器还在运行读写仍然有效。

时基单元,也就是决定了定时器的基本功能的模块包含:

1.计数器寄存器(Counter register,简写为TIMx_CNT)

2.预分频器寄存器 (Prescaler register,简写为TIMx_PSC)

3.自动装载寄存器 (Auto-reload register,简写为TIMx_ARR)

4.重复次数寄存器 (Repetition counter register,简写为TIMx_RCR)

1.影子寄存器

这张图是高级定时器框图的一部分,细心的人可以发现预分频器寄存器、自动重载寄存器和捕捉/比较寄存器下面有一个阴影,其他的寄存器有些也有阴影。

这表示在物理上这个寄存器对应2个寄存器:一个是我们可以可以写入或读出的寄存器,称为预装载寄存器,另一个是我们看不见的、无法真正对其读写操作的,但在使用中真正起作用的寄存器,称为影子寄存器.

数据手册介绍预装载寄存器的内容可以随时传送到影子寄存器,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把预装载寄存器的内容传送到影子寄存器。

原文如下:

The auto-reload register is preloaded. Writing to or reading from the auto-reload register accesses the preload register. The content of the preload register are transferred into the shadow register permanently or at each update event (UEV), depending on the auto-reload preload enable bit (ARPE) in TIMx_CR1 register. The update event is sent when the counter reaches the overflow (or underflow when downcounting) and if the UDIS bit equals 0 in the TIMx_CR1 register. It can also be generated by software. The generation of the update event is described in detailed for each configuration.

在图中的,表示对应寄存器的影子寄存器可以在发生更新事件时,被更新为它的预装载寄存器的内容;而图中的部分,表示对应的自动重载寄存器可以产生一个更新事件(U)或更新事件中断(UI)。

设计预装载寄存器和影子寄存器的好处是,所有真正需要起作用的寄存器(影子寄存器)可以在同一个时间(发生更新事件时)被更新为所对应的预装载寄存器的内容,这样可以保证多个通道的操作能够准确地同步。如果没有影子寄存器,软件更新预装载寄存器时,则同时更新了真正操作的寄存器,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上例如中断等

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top