1 STM32基本定时器、通用定时器、高级定时器区别

STM32系列微控制器中的定时器资源分为基本定时器(Basic Timer)、通用定时器(General Purpose Timer)和高级定时器(Advanced Timer)三类,它们在功能和复杂性上有所不同。

  • 基本定时器TIM6TIM7 是一个16位的只能向上计数的定时器,只能定时,没有外部 IO。

  • 通用定时器TIM2/3/4/5 是一个16位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕获,每个定时器有四个外部IO。

  • 高级定时器TIM1/TIM8 是一个16位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕获,还可以有三相电机互补输出信号,每个定时器有8个外部IO。

2 定时器基本参数

2.1 基本概念

  • Prescaler(预分频系数):输入给计数器的信号频率 = 输入到预分频器的信号频率 / ( 预分频系数 + 1)。该值为 0 相当于对 输入信号1分频,也就是不分频;该值为 1 相当于对 输入信号2分频,依此类推;

  • Period(计数周期):以 Up模式 为例,在此模式下计数器从0开始计数,每一个时钟信号计数值+1,当计数值等于计数周期的时候,当再有一个时钟信号,计数值变为0,可以触发更新中断。

  • AutoReloadPreload 预装载:控制是否启用“影子寄存器机制”。当预装载启用后,对 ARR、CCRx 的写入先写到影子寄存器中,只有在 更新事件(UEV) 时才更新到真正用于比较的寄存器中。比如:我在本次更新事件中断中修改了ARR、CCRx,需要在下一次更新事件中才会生效。因为本次更新事件触发的中断,本次更新事件已经过去。只有下一次就会生效。

2.2 寄存器

  • TIMx_PSC:预分频器寄存器,预分频系数。输入给计数器的信号频率 = 输入到预分频器的信号频率 / ( 预分频系数 + 1)。注意系统会加一

  • TIMx_ARR:自动重载寄存器。比如需要计数100更新中断,TIMx_ARR=99,当CNT计到99后,下一次时钟上升沿才会触发更新事件,并将CNT重装为0
    • CNT == ARR 本身不会立即重装
    • 需要再来 一个时钟周期,才会发生更新事件(即 CNT 从 99 → 0)。
  • TIMx_CNTT:计数器寄存器。

  • TIMx_CCR1:表示比较寄存器1,还有比较寄存器2,3,4(TIMx_CCR1,TIMx_CCR2,TIMx_CCR3,TIMx_CCR4)。

  • 影子寄存器:暂存写入值直到更新事件,才会写入上述寄存器中。auto-reload preload控制是否开启影子寄存器。如果不开启,寄存器值会立即写入上述寄存器中。

2.2.1 计时器寄存器

PSC = 1 (分频系数=PSC+1),因此就是对2个定时器外设APB时钟为一次计数。

ARR = 36,从 0开始,36完了结束,等到更新事件,所以就是 36 + 1 = 37个定时器时钟周期

alt text

2.2.2 控制寄存器1(TIMx_CR1)

alt text

3 PWM 输出

STM32的定时器除了TIM6和TIM7(基本定时器)之外,其他的定时器都可以产生PWM输出。其中,高级定时器TIM1、TIM8可以同时产生7路PWM输出。

3.1 PWM 模式

alt text

  1. 输出极性有高极性和低极性
     sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH
    
     sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW
    
  2. PWM1: TIMx_CNT < TIMx_CCR1 时通道1为有效电平

    • 高极性:有效电平时输出高电平, 图形下部分输出高电平

    • 低极性:有效电平时输出低电平,图形下部分输出低电平

  3. PWM2: TIMx_CNT < TIMx_CCR1 时通道1为无效电平

    • 高极性:有效电平时输出高电平, 图形上部分输出高电平

    • 低极性:有效电平时输出高电平, 图形上部分输出低电平

  4. Fast Mode 实际是 STM32 定时器中输出比较单元的 “输出比较快速使能(OCxFE)” 功能。 Fast Mode 对于 PWM 模式(特别是 PWM1/PWM2) 通常没有必要启用,原因如下:

    • PWM 模式本身已经是周期性且自动更新的;

    • 启用 Fast Mode 可能导致输出响应“过快”,破坏原本的 PWM 波形完整性;

    • 官方推荐:PWM 模式下关闭 Fast Mode,默认即为关闭。

1.1 基本定时器

https://blog.csdn.net/2403_87830841/article/details/143116910

https://cloud.tencent.com/developer/article/1997904

https://blog.csdn.net/qq_36347513/article/details/112599813

https://blog.csdn.net/TJ_conly/article/details/136430474

https://blog.csdn.net/Echo_cy_/article/details/134643472

https://blog.csdn.net/m0_73101636/article/details/143570022

https://blog.csdn.net/xieliru/article/details/140161055

https://blog.csdn.net/as480133937/article/details/99201209

https://shequ.stmicroelectronics.cn/thread-628484-1-1.html

https://blog.csdn.net/weixin_44057803/article/details/132218242

输入捕获

https://www.cnblogs.com/zxr-blog/p/17966424

https://blog.csdn.net/weixin_59455852/article/details/145423752

https://blog.csdn.net/weixin_57904199/article/details/142764845

https://www.cnblogs.com/mojies/p/17300963.html

SBUS

https://www.cnblogs.com/mojies/p/17300963.html

参考

参考1非常完整!!!

参考1: STM32-定时器

参考2: 关于PWM输出极性问题详解