STM32高级定时器

概述:

高级定时器是由一个可自动装载的16位定时器构成的,由可编程的分频器驱动。高级定时器有很多用途,可以作为PWM,输入捕获等功能。高级定时器和通用定时器是完全独立的,不共享任何资源。

主要特性:

  1. 16位向上、下、向上/下计数器。
  2. 16位可编程预分频器,分频系数可以在1~65536。
  3. 4路独立通道
    1. 输入捕获
    2. 输出比较
    3. PWM
    4. 单路脉冲输出模式
  4. 以下事件触发中断/DMA
    1. 更新:计数器溢出,计数器初始化(由软件、内部/外部触发)
    2. 计时器起始、停止计数;初始化或者由内部/外部触发计数
    3. 输入捕获
    4. 输出比较
    5. 刹车信号输入
  5. 支持增量编码器和霍尔传感器电路。

高级定时器框图

时基单元

高级定时器的主要部分就是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位被置位。

  1. 重复计数器根据TIMx_RCR的内容重新装载。
  2. 自动装载影子寄存器被重新置入TIMx_ARR的值。
  3. TIMx_PSC的内容填入预分频器的缓冲区。

影子寄存器:可以理解为一个缓冲区。当我们尝试改变用于保持计数值的寄存器的内容时,为了不扰乱当前已经处于计数的内容,通过写入影子寄存器,然后在合适的时机再协会去。起到缓冲和保护的作用。

影子寄存器的概念和意义:

影子寄存器是默认开启的。可以从定时器框图上看到带阴影的就是配置有影子寄存器的。包括重装载寄存器和预分频寄存器还有4路捕获/比较寄存器。

当开启影子寄存器时,我们重装载的值和预分频系数,其实都是从影子寄存器当中取的。只有当下一次的更新事件发生时,才有将本体寄存器的值更新到影子寄存器中。

这么做的意义:保证当前时钟周期所进行的任务不会被打乱

以预分频系数为例:下图可以清晰看到本体和影子寄存器数值变换的时机不同。

不同的预分频系数导致的时钟信号输入是不同的,那么如果没有影子寄存器,当前周期还没有完成的任务,被新的时钟信号打乱了,如果对时钟信号是有要求的系统,可能会导致某些任务的失败或者崩溃。通过影子寄存器,在下次事件更新时才变动数值,进入下一个周期中的不同任务中。

向下计数

向下计数基本上和向上计数相同。向下计数从自动装载值开始向下计数直到0,然后产生一个向下溢出事件。

中央对齐模式

中央对其模式下,计数器从0开始向上计数,直到reload value - 1,这时会产生一个溢出事件,然后向下计数,直到计数到1,产生一个下溢事件。之后又从0开始计数。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值