概述:
高级定时器是由一个可自动装载的16位定时器构成的,由可编程的分频器驱动。高级定时器有很多用途,可以作为PWM,输入捕获等功能。高级定时器和通用定时器是完全独立的,不共享任何资源。
主要特性:
- 16位向上、下、向上/下计数器。
- 16位可编程预分频器,分频系数可以在1~65536。
- 4路独立通道
- 输入捕获
- 输出比较
- PWM
- 单路脉冲输出模式
- 以下事件触发中断/DMA
- 更新:计数器溢出,计数器初始化(由软件、内部/外部触发)
- 计时器起始、停止计数;初始化或者由内部/外部触发计数
- 输入捕获
- 输出比较
- 刹车信号输入
- 支持增量编码器和霍尔传感器电路。
高级定时器框图
时基单元
高级定时器的主要部分就是16位的计数器以及相关的自动装载寄存器。计数器的时钟由预分频器分频得到。
TIM_ARR是预先装载的,读写该寄存器时将访问预装载寄存器。根据在TIMx_CR1寄存器中的自动装载预装载使能位的设置,预装载寄存器的内容被立即或者每次的UEV发生时被送到影子寄存器。
预分频器:
通过 TIMx_PSC寄存器可以定义其预分频系数。该寄存器带有缓冲区,因此能够在运行时被改变,在下一个UEV来到时生效。
高级定时器的具体功能模式
计数器模式
向上计数
计数器从0开始,计数到自动装载值后,重新开始计数并且产生一个溢出事件。若使用了重复计数器功能,在达到重复次数后(TIMx_RCR)就会产生更新事件UEV。
通过TIMx_EGR中的UG位,也可以软件进行UEV事件的触发。
UEV事件可以通过软件失能,将TIMx_CR1中的UDIS置位即可,可以防止在对重装载寄存器写入新值时改变影子寄存器的值。
若个设置了TIMx_CR1中的URS位(选择更新请求),设置UG位将产生一个UEV,但是硬件不设置UIF标志(不产生中断和DMA请求)。避免捕获模式下清空计数器时,产生更新和捕获中断。
当溢出时,发生更新事件:所以寄存器都更新,且UIF位被置位。
- 重复计数器根据TIMx_RCR的内容重新装载。
- 自动装载影子寄存器被重新置入TIMx_ARR的值。
- TIMx_PSC的内容填入预分频器的缓冲区。
影子寄存器:可以理解为一个缓冲区。当我们尝试改变用于保持计数值的寄存器的内容时,为了不扰乱当前已经处于计数的内容,通过写入影子寄存器,然后在合适的时机再协会去。起到缓冲和保护的作用。
影子寄存器的概念和意义:
影子寄存器是默认开启的。可以从定时器框图上看到带阴影的就是配置有影子寄存器的。包括重装载寄存器和预分频寄存器还有4路捕获/比较寄存器。
当开启影子寄存器时,我们重装载的值和预分频系数,其实都是从影子寄存器当中取的。只有当下一次的更新事件发生时,才有将本体寄存器的值更新到影子寄存器中。
这么做的意义:保证当前时钟周期所进行的任务不会被打乱。
以预分频系数为例:下图可以清晰看到本体和影子寄存器数值变换的时机不同。
不同的预分频系数导致的时钟信号输入是不同的,那么如果没有影子寄存器,当前周期还没有完成的任务,被新的时钟信号打乱了,如果对时钟信号是有要求的系统,可能会导致某些任务的失败或者崩溃。通过影子寄存器,在下次事件更新时才变动数值,进入下一个周期中的不同任务中。
向下计数
向下计数基本上和向上计数相同。向下计数从自动装载值开始向下计数直到0,然后产生一个向下溢出事件。
中央对齐模式
中央对其模式下,计数器从0开始向上计数,直到reload value - 1,这时会产生一个溢出事件,然后向下计数,直到计数到1,产生一个下溢事件。之后又从0开始计数。