22. 高级定时器

一、高级定时器简介

  STM32F407 有 2 个高级定时器(TIM1 和 TIM8)。这些定时器彼此完全独立,不共享任何资源。其主要特性如下:16 位递增、递减、中心对齐计数器(计数值:0 ~ 65535),16 位可编程预分频器(预分频系数:1 ~ 65536),用于对计数器时钟频率进行分频,还可以触发 DAC、ADC的同步电路,以及在更新事件、触发事件、输入捕获、输出比较时,会生成中断/DMA 请求。它有 4 个独立通道,可用于:输入捕获、输出比较、输出 PWM 、单脉冲模式等。可以使用外部信号控制定时器且可以实现多个定时器互连的同步电路。它支持编码器和霍尔传感器电路等。

  相比于通用定时器,高级定时器还有 重复计数器死区时间带可编程的互补输出短路输入功能。短路输入用于将定时器的输出信号置于用户可选的安全配置中。

二、高级定时器框图

  高级定时器的框图和通用定时器框图很类似,只是添加了其它的一些功能,如:重复计数器、带死区控制的互补输出通道、断路输入等。这些功能在高级定时器框图的位置如下:

高级定时器框图

①、重复计数器

  在 F4 系列中,高级定时器 TIM1 和 TIM8 都有重复计数器。通用定时器发生上溢或者下溢时,会直接生成更新事件。但是有重复计数器的定时器并不完全是这样的,定时器每次发生上溢或下溢时,重复计数器的值会减一,当重复计数器的值为 0 时,再发生一次上溢或者下溢才会生成定时器更新事件。如果我们设置重复计数器寄存器 RCR 的值为 N,那么更新事件将在定时器发生 N+1 次上溢或下溢时发生。

  重复计数器寄存器是具有影子寄存器的,所以 RCR 寄存器只是起缓冲的作用。RCR 寄存器的值会在更新事件发生时,被转移至其影子寄存器中,从而真正生效。

②、输出比较

  高级定时器输出比较部分和通用定时器相比,多了带死区控制的互补输出功能。第 ② 部分的 TIMx_CH1N、TIMx_CH2N 和 TIMx_CH3N 分别是定时器通道 1、通道 2 和通道 3 的互补输出通道,通道 4 是没有互补输出通道的。DTG 是死区发生器,死区时间由 DTG[7:0] 位来配置。如果不使用互补通道和死区时间控制,那么高级定时器 TIM1 和 TIM8 和通用定时器的输出比较部分使用方法基本一样,只是要注意 MOE 位得置 1 定时器才能输出。

③、断路功能

  断路功能也称刹车功能,一般用于电机控制的刹车。F4 系列有一个断路通道,断路源可以是刹车输入引脚(TIMx_BKIN),也可以是一个时钟失败事件。时钟失败事件由复位时钟控制器中的时钟安全系统产生。系统复位后,断路功能默认被禁止,MOE 位为低。

  使能断路功能的方法:将 TIMx_BDTR 的位 BKE 置 1。断路输入引脚 TIMx_BKIN 的输入有效电平可通过 TIMx_BDTR 寄存器的位 BKP 设置。

  使能刹车功能后:由 TIMx_BDTR 的 MOE、OSSI、OSSR 位,TIMx_CR2 的 OISx、OISxN 位,TIMx_CCER 的 CCxE、CCxNE 位控制 OCx 和 OCxN 输出状态。无论何时,OCx 和 OCxN 输出都不能同时处在有效电平。

  当发生断路输入后,会怎么样?

  • MOE 位被异步地清零,OCx 和 OCxN 为无效、空闲或复位状态(由 OSSI 位选择)。
  • OCx 和 OCxN 的状态:由相关控制位状态决定,当使用互补输出时:根据情况自动控制输出电平,参考《STM32F4xx 参考手册_V4(中文版).pdf》手册第 382 页的表 73 具有断路功能的互补通道 Ocx 和 OcxN 的控制位。
  • BIF 位置 1,如果使能了 BIE 位,还会产生刹车中断;如果使能了 TDE 位,会产生 DMA 请求。
  • 如果 AOE 位置 1,在下一个更新事件 UEV 时,MOE 位被自动置 1。

三、高级定时器常用寄存器

3.1、TIM1和TIM8控制寄存器

TIM1和TIM8控制寄存器1

  TIMx_CR1 寄存器位 7(ARPE)用于控制自动重载寄存器是否进行缓冲,如果 ARPE 位置 1,ARR 起缓冲作用,即只有在更新事件发生时才会把 ARR 的值写入其影子寄存器里;如果 ARPE 位置 0,那么修改自动重载寄存器的值时,该值会马上被写入其影子寄存器中,从而立即生效。

  TIMx_CR1 寄存器 CMS[6:5] 位,用于设置边沿对齐模式还是中心对齐模式。当 CMS[1:0] 位设置为 00 时,为边沿对齐模式,其它值为中心对齐模式。

  TIMx_CR1 寄存器位 4 DIR 位,用于控制定时器的计数方向。设置 DIR 位为 0 时,为递增计数。设置 DIR 位为 1 时,为递减计数。当定时器配置为中心对齐模式或编码器模式时,该位为只读状态。

  TIMx_CR1 寄存器位 0 CEN 位,用于使能计数器的工作,必须要设置该位为 1,计数器才会开始计数。

TIM1和TIM8控制寄存器2

3.2、TIM1和TIM8从模式控制寄存器

TIM1和TIM8从模式控制寄存器

  该寄存器的 SMS[2:0]位,用于从模式选择,其实就是选择计数器输入时钟的来源。比如通用定时器中断例程中我们设置 SMS[2:0]=000,禁止从模式,这样 PSC 预分频器的时钟就直接来自内部时钟(CK_INT),按照我们例程 System_Clock_Init() 函数的配置,频率为 84Mhz(APB1 总线时钟频率的 2 倍)。

3.3、TIM1和TIM8 DMA/中断使能寄存器

TIM1和TIM8 DMA/中断使能寄存器)

  该寄存器用于使能/失能触发 DMA 请求、捕获/比较中断以及更新中断。如果我们要使用更新中断,所以把位 0(UIE)置 1 即可。

3.4、TIM1和TIM8状态寄存器

TIM1和TIM8状态寄存器

  该寄存器都是一些中断标志位,比如更新中断标志位、捕获/比较中断标志位等。在通用定时器中断例程中我们用到更新中断标志位,当定时器更新中断到来后,位 0(UIF)会由硬件置 1,我们需要在中断服务函数里面把该位清零。

3.5、TIM1和TIM8事件生成寄存器

TIM1和TIM8事件生成寄存器

 该寄存器作用是让用户用软件方式产生各类事件。UG 位是更新事件的控制位,作用和定时器溢出时产生的更新事件一样,区别是这里是通过软件产生的,而定时器溢出是硬件自己完成的。只有开启了更新中断,这两种方式都可以产更新中断。

3.6、TIM1和TIM8捕获/比较模式寄存器

TIM1和TIM8捕获/比较模式寄存器1

  该寄存器的有些位在不同模式下,功能不一样,我们前面已经说过。比如我们要让 TIM1 的 CH1 输出 PWM 波为例,该寄存器的模式设置位 OC1M[2:0]就是对应着通道 1 的模式设置,此部分由 3 位组成,总共可以配置成 8 种模式,我们使用的是 PWM 模式,所以这 3 位必须设置为 110 或者 111,分别对应 PWM 模式 1 和 PWM 模式 2。这两种 PWM 模式的区别就是输出有效电平的极性相反,这里我们设置为 PWM 模式 1。位 3 OC1PE 是输出比较通道 1 的预装使能,该位需要置 1,另外 CC1S[1:0]用于设置通道 1 的方向(输入/输出)默认设置为 0,就是设置通道作为输出使用。

TIM1和TIM8捕获/比较模式寄存器2

3.7、TIM1和TIM8捕获/比较使能寄存器

TIM1和TIM8捕获/比较使能寄存器

  该寄存器控制着各个输入输出通道的开关和极性。如果我们想让要让 TIM1 的 CH1 输出 PWM 波,这里我们要使能 CC1E 位,该位是通道 1 输入/输出使能位,要想 PWM 从 IO 口输出,这个位必须设置为 1。如果我们想要通道 1 的互补通道输出相反的 PWM 波,我们需要把对应的捕获/比较 1 输出使能位CC1E 置 1。CC1P 和 CC1NP 分别是通道 1 输出和通道 1 互补输出的极性设置位。

3.8、TIM1和TIM8计数器

TIM1和TIM8计数器

  TIM1/TIM8 的计数寄存器都是 16 位有效的,计数模式可以是递增计数模式、递减计数模式和中心对齐计数模式。和基本定时器一样,可以直接写该寄存器设置计数的初始值,也可以读取该寄存器获取计数器值。

3.9、TIM1和TIM8预分频器

TIM1和TIM8预分频器

  定时器的预分频寄存器都是 16 位的,即写入该寄存器的数值范围是 0 到 65535,表示 1 到 65536 分频。比如我们要 8400 分频,就往该寄存器写入 8399。

3.10、TIM1和TIM8自动重载寄存器

TIM1和TIM8自动重载寄存器

  该寄存器可以由 APRE 位设置是否进行缓冲。计数器的值会和自动重装寄存器影子寄存器进行比较,当两者相等,定时器就会溢出,从而发生更新事件,如果打开了更新中断,还会发生更新中断。

3.11、TIM1和TIM8重复计数器寄存器

TIM1和TIM8重复计数器寄存器

  重复计数器寄存器用于设置重复计数器值,因为它具有影子寄存器,所以它本身只是起缓冲作用。当更新事件发生时,该寄存器的值会转移到其影子寄存器中,从而真正起作用。

  该寄存器的 REP[7:0] 位是低 8 位有效,即最大值 255。因为这个寄存器只是起缓冲作用,如果大家对该寄存器写入值后,想要立即生效,可以通过对 UG 位写 1,产生软件更新事件。

3.12、TIM1和TIM8捕获/比较寄存器

TIM1和TIM8捕获/比较寄存器1

  捕获/比较寄存器(TIMx_CCR1),该寄存器只有 1 个,对应通道 CH1。我们使用的是通道 1。在输出模式下,捕获/比较寄存器影子寄存器的值与 CNT 的值比较,根据比较结果产生相应动作,利用这点,我们通过修改这个寄存器的值,就可以控制 PWM 的占空比了。

TIM1和TIM8捕获/比较寄存器2

TIM1和TIM8捕获/比较寄存器3

TIM1和TIM8捕获/比较寄存器4

3.13、TIM1和TIM8断路和死区寄存器

TIM1和TIM8断路和死区寄存器

  DTG[7:0] 位,用于设置死区时间。

  位 12 BKP 位是选择断路输入信号有效电平。

  位 13 BKE 位是断路输入功能,如果我们想要使用断路输入功能,需要将位 12 BKE 位置 1 即可。

  位 14 AOE 位是自动输出使能位,如果使能 AOE 位,那么在我们输入刹车信号后再断开了刹车信号,互补的 PWM 会自动恢复输出,如果失能 AOE 位,那么在输入刹车信号后再断开了刹车信号,互补的 PWM 就不会恢复输出,而是一直保持刹车信号输入时的状态。为了方便观察,我们使能该位,即置 1。

  位 15 MOE 位是使能主输出,想要高级定时器的通道正常输出,则必须设置 MOE 位为 1。

四、高级定时器对应通道引脚

【1】、TIM1 对应通道引脚及其重映射

通道名 通道引脚 重映射通道引脚 互补通道名 互补通道引脚 互补重映射通道引脚
Channel 1 PA8 PE9 Channel 1N PA7 PE8/PB13
Channel 2 PA9 PE11 Channel 2N PB0 PE10/PB14
Channel 3 PA10 PE13 Channel 3N PB1 PE12/PB15
Channel 4 PA11 PE14 Channel 4N

【2】、TIM8 对应通道引脚及其重映射

通道名 通道引脚 重映射通道引脚 互补通道名 互补通道引脚 互补重映射通道引脚
Channel 1 PC6 Channel 1N PA5 PA7
Channel 2 PC7 Channel 2N PB0 PB14
Channel 3 PC8 Channel 3N PB1 PB15
Channel 4 PC9 Channel 4N
posted @ 2023-12-02 18:22  星光映梦  阅读(89)  评论(0编辑  收藏  举报