第二十一章 TIM——通用定时器
目录
1 定时器简介
通用定时器是一个通过可编程预分频器驱动的 16 位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作
2 通用定时器主要功能
主要功能
通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能包括:
- 16 位向上、向下、向上/向下自动装载计数器
- 16 位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为 1~65536 之间的任意数值
- 4 个独立通道:
- 输入捕获
- 输出比较
- PWM 生成(边缘或中间对齐模式)
- 单脉冲模式输出
- 使用外部信号控制定时器和定时器互连的同步电路
- 如下事件发生时产生中断/DMA:
- 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
- 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
- 输入捕获
- 输出比较
- 支持针对定位的增量(正交)编码器和霍尔传感器电路
- 触发输入作为外部时钟或者按周期的电流管理
通用定时器功能框图如下:

3 通用定时器功能描述
3.1 时基单元
可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可 以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。
计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。 时基单元包含:
- 计数器寄存器(TIMx_CNT)
- 预分频器寄存器 (TIMx_PSC)
- 自动装载寄存器 (TIMx_ARR)
自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。 根据在
TIMx_CR1 寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或在 每次的更新事件 UEV 时传送到影子寄存器。当计数器达到溢出条件(向下计数时的下溢条件)并当TIMx_CR1 寄存器中的 UDIS 位等于'0'时,产生更新事件。更新事件也可以由软件产生。随后会详细描述每一种配置下更新事件的产生。
计数器由预分频器的时钟输出 CK_CNT 驱动,仅当设置了计数器 TIMx_CR1 寄存器中的计数器使能位(CEN)时,CK_CNT 才有效。
注:真正的计数器使能信号 CNT_EN 是在 CEN 的一个时钟周期后被设置。
预分频器描述
预分频器可以将计数器的时钟频率按 1 到 65536 之间的任意值分频。它是基于一个(在 TIMx_PSC 寄存器中的)16 位寄存器控制的 16 位计数器。这个控制寄存器带有缓冲器,它能够在工作时被改变。新的预分频器参数在下一次更新事件到来时被采用给出了在预分频器运行时,更改计数器参数的例子。当预分频器的参数从 1 变到 2 时,计数器的时序图如下:

当预分频器的参数从 1 变到 4 时,计数器的时序图如下:

3.2 计数器模式
向上计数模式
在向上计数模式中,计数器从 0 计数到自动加载值(TIMx_ARR 计数器的内容),然后重新从 0 开始计数并且产生一个计数器溢出事件。
每次计数器溢出时可以产生更新事件,在 TIMx_EGR 寄存器中(通过软件方式或者使用从模式控 制器)设置 UG 位也同样可以产生一个更新事件。
设置 TIMx_CR1 寄存器中的 UDIS 位,可以禁止更新事件;这样可以避免在向预装载寄存器中写 入新值时更新影子寄存器。在 UDIS 位被清'0'之前,将不产生更新事件。但是在应该产生更新事 件时,计数器仍会被清'0',同时预分频器的计数也被请 0(但预分频系数不变)。此外,如果设置 了TIMx_CR1 寄存器中的 URS 位(选择更新请求),设置 UG 位将产生一个更新事件 UEV,但硬件 不设置 UIF 标志(即不产生中断或 DMA 请求);这是为了避免在捕获模式下清除计数器时,同时产 生更新和捕获中断。
当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据 URS 位)设置更新标志位(TIMx_SR 寄存器中的 UIF 位)。
预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC 寄存器的内容)。
自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。
下图给出一些例子,当 TIMx_ARR=0x36 时计数器在不同时钟频率下的动作。内部时钟分频因子为 1时,计数器时序图:

内部时钟分频因子为 2,计数器时序图:

内部时钟分频因子为4,计数器时序图:

内部时钟分频因子为N,计数器时序图:

当 ARPE=0 时的更新事件(TIMx_ARR 没有预装入),计数器时序图:

当 ARPE=1 时的更新事件(预装入了 TIMx_ARR),计数器时序图:

3.3 捕获/比较通道
每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器),包括捕获的输入部分(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。 下面几张图是一个捕获/比较通道概览。
输入部分对相应的 TIx 输入信号采样,并产生一个滤波后的信号 TIxF。然后,一个带极性选择的边缘检测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。该信号通过预分频进入捕获寄存器(ICxPS):

输出部分产生一个中间波形 OCxRef(高有效)作为基准,链的末端决定最终输出信号的极性:

捕获/比较通道 1 的主电路:

捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器。
在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。
在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器进行比较。
3.4 输入捕获模式
根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为 TIx 时,输入滤波器控制位是TIMx_CCMRx 寄存器中的 ICxF 位)。假设输入信号在最多 5 个内部时钟周期的时间内抖动,我们须配置滤波器的带宽长于 5 个时钟周期。因此我们可以(以 fDTS 频率)连续采样 8 次,以确 认在 TI1 上一次真实的边沿变换,即在 TIMx_CCMR1 寄存器中写入 IC1F=0011。
选择 TI1 通道的有效转换边沿,在 TIMx_CCER 寄存器中写入 CC1P=0(上升沿)。
配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预 分频器被禁止(写 TIMx_CCMR1 寄存器的 IC1PS=00)。
设置 TIMx_CCER 寄存器的 CC1E=1,允许捕获计数器的值到捕获寄存器中。
如果需要,通过设置TIMx_DIER寄存器中的CC1IE位允许相关中断请求,通过设置 TIMx_DIER寄存器中的 CC1DE 位允许 DMA 请求。
当发生一个输入捕获时:
产生有效的电平转换时,计数器的值被传送到 TIMx_CCR1 寄存器。
CC1IF 标志被设置(中断标志)。当发生至少 2 个连续的捕获时,而 CC1IF 未曾被清除, CC1OF也被置'1'。
如设置了 CC1IE 位,则会产生一个中断。
如设置了 CC1DE 位,则还会产生一个 DMA 请求。
为了处理捕获溢出,建议在读出捕获溢出标志之前读取数据,这是为了避免丢失在读出捕获溢 出标志之后和读取数据之前可能产生的捕获溢出信息。
注: 设置 TIMx_EGR 寄存器中相应的 CCxG 位,可以通过软件产生输入捕获中断和/或 DMA 请求
3.5 PWM 输入模式(仅适用于 TIM9/12)
该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:
两个 ICx 信号被映射至同一个 TIx 输入。
这 2 个 ICx 信号为边沿有效,但是极性相反。
其中一个 TIxFP 信号被作为触发输入信号,而从模式控制器被配置成复位模式。
例如,你需要测量输入到 TI1 上的 PWM 信号的长度(TIMx_CCR1 寄存器)和占空比(TIMx_CCR2 寄存器),具体步骤如下(取决于 CK_INT 的频率和预分频器的值)
选择 TIMx_CCR1 的有效输入:置 TIMx_CCMR1 寄存器的 CC1S=01(选择 TI1)。
选择 TI1FP1 的有效极性(用来捕获数据到 TIMx_CCR1 中和清除计数器):置 CC1P=0(上升沿有效)。

最低0.47元/天 解锁文章
2392

被折叠的 条评论
为什么被折叠?



