第十章 基本定时器
第十章 基本定时器
目录
第十章 基本定时器
1 基本定时器简介
1.1 TIM6和TIM7简介
1.2 TIM6和TIM7的主要特性
1.3 TIM6和TIM7的功能
1.4 调试模式
2 寄存器描述
2.1 TIM6和TIM7控制寄存器 1(TIMx_CR1)
2.2 TIM6和TIM7控制寄存器 2(TIMx_CR2)
2.3 TIM6和TIM7DMA/中断使能寄存器(TIMx_DIER)
2.4 TIM6和TIM7状态寄存器(TIMx_SR)
2.5 TIM6和TIM7事件产生寄存器(TIMx_EGR)
2.6 TIM6和TIM7计数器(TIMx_CNT)
2.7 TIM6和TIM7预分频器(TIMx_PSC)
2.8 TIM6和TIM7自动重装载寄存器(TIMx_ARR)
2.9 TIM6和TIM7寄存器
W55MH32微控制器集成了丰富的定时器资源,共计17个定时器,包括:10个通用16位定时器(每定时器支持4通道输入捕获/输出比较/PWM/脉冲计数及增量编码器接口)、2个带死区控制和紧急刹车功能的16位高级控制定时器(专为电机控制优化)、2个看门狗定时器(独立型和窗口型)、1个24位系统时间定时器(递减计数)以及2个16位基本定时器,全面覆盖工业控制、电机驱动、系统监控及实时计数等应用场景。
本章分为如下几个小节:
1 基本定时器 简介
2 寄存器描述
1 基本定时器简介
W55MH32的基本定时器为TIM6和TIM7。
1.1 TIM6和TIM7简介
基本定时器 TIM6 和 TIM7 各包含一个 16 位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到 DAC 并通过触发输出直接驱动 DAC。这 2 个定时器是互相独立的,不共享任何资源。
1.2 TIM6和TIM7的主要特性
TIM6和TIM7 定时器的主要功能包括:
- 16 位自动重装载累加计数器。
- 16 位可编程(可实时修改)预分频器,用于对输入的时钟按系数为 1~65536 之间的任意数值分频。
- 触发DAC的同步电路。
- 在更新事件(计数器溢出)时产生中断请求。
基本定时器框图
1.3 TIM6和TIM7的功能
时基单元
这个可编程定时器的主要部分是一个带有自动重装载的 16 位累加计数器,计数器的时钟通过一个预分频器得到。
软件可以读写计数器、自动重装载寄存器和预分频寄存器,即使计数器运行时也可以操作。时基单元包含:
- 计数器寄存器(TIMx_CNT)
- 预分频寄存器(TIMx_PSC)
- 自动重装载寄存器(TIMx_ARR)
自动重装载寄存器是预加载的,每次读写自动重装载寄存器时,实际上是通过读写预加载寄存器实现。根据 TIMx_CR1 寄存器中的自动重装载预加载使能位(ARPE),写入预加载寄存器的内容能够立即或在每次更新事件时,传送到它的影子寄存器。当 TIMx_CR1 寄存器的 UDIS 位为'0',则每当计数器达到溢出值时,硬件发出更新事件;软件也可以产生更新事件;关于更新事件的产生,随后会有详细的介绍。计数器由预分频输出 CK_CNT 驱动,设置 TIMx_CR1 寄存器中的计数器使能位(CEN)使能计数器计数。
注意: 实际的设置计数器使能信号 CNT_EN 相对于 CEN 滞后一个时钟周期。
预分频器
预分频可以以系数介于 1 至 65536 之间的任意数值对计数器时钟分频。它是通过一个 16 位寄存器(TIMx_PSC)的计数实现分频。因为 TIMx_PSC 控制寄存器具有缓冲,可以在运行过程中改变它的数值,新的预分频数值将在下一个更新事件时起作用。以下两图是在运行过程中改变预分频系数的例子。
预分频系数从 1 变到 2 的计数器时序图
预分频系数从 1 变到 4 的计数器时序图
计数模式
计数器从 0 累加计数到自动重装载数值(TIMx_ARR 寄存器),然后重新从 0 开始计数并产生一个计数器溢出事件。每次计数器溢出时可以产生更新事件;(通过软件或使用从模式控制器)设置 TIMx_EGR 寄存器的UG 位也可以产生更新事件。设置 TIMx_CR1 中的 UDIS 位可以禁止产生 UEV 事件,这可以避免在写入预加载寄存器时更改影子寄存器。在清除 UDIS 位为'0'之前,将不再产生更新事件,但计数器和预分频器依然会在应产生更新事件时重新从 0 开始计数(但预分频系数不变)。另外,如果设置了 TIMx_CR1 寄存器中的 URS(选择更新请求),设置 UG 位可以产生一次更新事件 UEV,但不设置 UIF 标志(即没有中断)。当发生一次更新事件时,所有寄存器会被更新并(根据 URS位)设置更新标志(TIMx_SR寄存器的 UIF位):
- 传送预装载值(TIMx_PSC 寄存器的内容)至预分频器的缓冲区。
- 自动重装载影子寄存器被更新为预装载值(TIMx_ARR)。
以下是一些在 TIMx_ARR=0x36 时不同时钟频率下计数器工作的图示例子。
计数器时序图,内部时钟分频系数为 1
计数器时序图,内部时钟分频系数为 2
计数器时序图,内部时钟分频系数为 4
计数器时序图,内部时钟分频系数为 N
计数器时序图,当 ARPE=0 时的更新事件(TIMx_ARR 没有预装载)
计数器时序图,当 ARPE=1 时的更新事件(预装载 TIMx_ARR)
时钟源
计数器的时钟由内部时钟(CK_INT)提供。TIMx_CR1 寄存器的 CEN 位和 TIMx_EGR 寄存器的 UG 位是实际的控制位,(除了 UG 位被自动清除外)只能通过软件改变它们。一旦置 CEN 位为'1',内部时钟即向预分频器提供时钟。下图示出控制电路和向上计数器在普通模式下,没有预分频器时的操作。
普通模式时序图,内部时钟分频系数为 1
1.4 调试模式
当微控制器进入调试模式(Cortex-M3 核心停止)时,根据 DBG 模块中的配置位 DBG_TIMx_STOP 的设置,TIMx 计数器或者继续计数或者停止工作。
2 寄存器描述
TIM6 和 TIM7 寄存器:可以用半字(16 位)或字(32 位)的方式操作这些外设寄存器。
2.1 TIM6和TIM7控制寄存器 1(TIMx_CR1)
偏移地址:0x00
复位值:0x0000
2.2 TIM6和TIM7控制寄存器 2(TIMx_CR2)
偏移地址:0x04
复位值:0x0000
2.3 TIM6和TIM7DMA/中断使能寄存器(TIMx_DIER)
偏移地址:0x0C
复位值:0x0000
2.4 TIM6和TIM7状态寄存器(TIMx_SR)
偏移地址:0x10
复位值:0x0000
2.5 TIM6和TIM7事件产生寄存器(TIMx_EGR)
偏移地址:0x14
复位值:0x0000
2.6 TIM6和TIM7计数器(TIMx_CNT)
偏移地址:0x24
复位值:0x0000
2.7 TIM6和TIM7预分频器(TIMx_PSC)
偏移地址:0x28
复位值:0x0000
2.8 TIM6和TIM7自动重装载寄存器(TIMx_ARR)
2.9 TIM6和TIM7寄存器
下表中将 TIMx 的所有寄存器映射到一个 16 位可寻址(编址)空间。