八、STM32——TIM
1 STM32基本定时器、通用定时器、高级定时器区别
STM32系列微控制器中的定时器资源分为基本定时器(Basic Timer)、通用定时器(General Purpose Timer)和高级定时器(Advanced Timer)三类,它们在功能和复杂性上有所不同。
-
基本定时器:
TIM6
和TIM7
是一个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个定时器时钟周期
2.2.2 控制寄存器1(TIMx_CR1)
3 PWM 输出
STM32的定时器除了TIM6和TIM7(基本定时器)之外,其他的定时器都可以产生PWM输出。其中,高级定时器TIM1、TIM8可以同时产生7路PWM输出。
3.1 PWM 模式
- 输出极性有高极性和低极性
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW
-
PWM1: TIMx_CNT < TIMx_CCR1 时通道1为有效电平
-
高极性:有效电平时输出高电平, 图形下部分输出高电平
-
低极性:有效电平时输出低电平,图形下部分输出低电平
-
-
PWM2: TIMx_CNT < TIMx_CCR1 时通道1为无效电平
-
高极性:有效电平时输出高电平, 图形上部分输出高电平
-
低极性:有效电平时输出高电平, 图形上部分输出低电平
-
-
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