一、STM32定时器介绍
1、STM32F4定时器介绍
- STM32F4xx 系列微控制器具有多达14个定时器。其中包括2个基本定时器,10 个通用定时器2个高级定时器
-
其中最大定时器时钟可通过 RCC_DCKCFGR 寄存器配置为 84MHz 或者 168MHz。一般是默认配置
2、定时器计数模式
-
向上计数模式
计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。 -
向下计数模式
计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。 -
中央对齐模式(向上/向下计数)
计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
3、几种定时器功能比较
-
基本定时器TIM功能
主要运用于定时计数以及驱动DAC -
通用定时器TIM功能
●定时器定时计数
● 输入捕获
● 输出比较
● PWM输出
● 使用外部信号控制定时器和定时器互连的同步电路 -
高级定时器TIM功能
● 通用定时器的有功能
● 带死区控制和紧急刹车,可用于PWM控制电机
4、定时器的时钟
查看定时器在哪个总线上,总线上时钟已知,可以得到定时器时钟
因为总线的分频不是1,需要乘2
5、定时器的时基部分
- 时钟源:定时器时钟 TIMxCLK,即内部时钟 CK_INT,经 APB 预分频器后分频提供
- 计数器时钟:定时器时钟经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数
- 计数器CNT: 是一个 16 位/32的计数器
- 自动重装载寄存器:这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断
-
计时中断时间:
1/(TIMxCLK/(PSC+1)) * (ARR+1)
6、定时器输入捕获与输出比较
-
输入捕获
输入捕获可以用来捕获外部事件,比如引脚的电平变化(上升沿,下降沿),并记录下变化的时间,通常可以用来测量外部信号的频率或者电平持续的时间
-
输出比较
此项功能是用来控制一个输出波形,当计数器与捕获/比较寄存器的内容相同时,输出比较功能做出相应动作,比如电平的翻转。通常用于生产PWM波形
二、STM32定时器之定时中断实验
1、CubeMx配置
TIM6挂载在APB1总线上,时钟为84M
分频配置,时间最终为1s,计时中断时间:
1/(TIMxCLK/(PSC+1)) * (ARR+1)
中断使能
2、功能代码实现
需要使能中断
弱函数,可重写
函数调用是一致的,需要判断是否是TIM6触发的。
三、STM32高级定时器功能分析
1、定时器通道
高级定时器和通用定时器在基本定时器的基础上引入了外部引脚,可以输入捕获和输出比较功能。高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能都是针对工业电机控制方面。
2、高级定时器功能框图分析
①时钟源 ②控制器 ③时基单元 ④输入捕获 ⑤公共部分 ⑥输出比较
2.1、时钟源
● 内部时钟 (CK_INT)
● 外部时钟模式 1:外部输入引脚TIx(x=1,2,3,4)
● 外部时钟模式 2:外部触发输入 ETR
● 外部触发输入 (ITRx):使用一个定时器作为另一定时器的预分频器,例如,可将定时器1 配置为定时器 2 的预分频器。
注:一般情况下,我们都是使用内部时钟
2.2、控制器
高级控制定时器控制器部分包括触发控制器、从模式控制器以及编码器接口。触发控制器用来针对片内外设输出触发信号,比如为其它定时器提供时钟和触发 DAC/ADC 转换。编码器接口专门针对编码器计数而设计。从模式控制器可以控制计数器复位、启动、递增/递减、计数。
2.3、时基单元
高级控制定时器时基单元包括四个寄存器
- 预分频器 PSC:对输入时钟进行分频得到计数器的驱动时钟CK_CNT
- 计数器 CNT: 在外部时钟的驱动下实时的进行计数
- 自动重载寄存器ARR:用来存放与计数器 CNT 比较的值,如果两个值相等就递减重复计数器。
-
重复计数器RCR:高级定时器特有,在定时器发生上溢或下溢事件时递减重复计数器的值,只有当重复计数器为 0 时才会生成更新事件
2.4、输入捕获
输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用来测量输入信号的脉宽和频率
2.5、公共部分
2.6、输出比较
- 输出比较就是通过定时器的计数比较控制外部引脚对外输出高低电平
-
比较输出有很多种模式,其中PWM模式是输出比较中使用的最多的模式。
2.7、互补输出和死区控制
两路管脚互补输出,驱动电机正反转,因为两管脚不能同时导通,会烧毁电机,delay延时进行死区控制
高级控制定时器比通用定时器增加了可编程死区互补输出功能,常应用在工业电机控制方面
四、STM32定时器之输入捕获实验
1、输入捕获功能框图
输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用来测量输入信号的脉宽和频率
2、输入捕获应用
输入捕获模式可以用来测量频率或者电平持续的时间。
可以通过捕获value值,进行计算。
3、实例操作
利用定时器2的输入捕获功能测量按下KEY6键后低电平持续的时间
通过捕获下降沿和上升沿。
3.1、输入捕获测电平持续的时间
需要考虑中间溢出时间。
为了避免CCRx1和CCRx2值的大小判断,可以在捕获下降沿t1时,将寄存器CNT赋值为0.
3.2、CubeMx配置
1、TIM2时钟源为内部时钟,通道为输入捕获功能
2、配置时钟,接外部晶振
3、配置定时器
84分频,计数器时钟频率为1M,时间为1us,ARR为1000000,溢出时间为1s,通道检测第一次捕获为下降沿。
4、中断配置
3.3、代码实现
1、配置查看
2、printf重写
2、使能溢出和捕获中断
中断入口
捕获事件中断
弱函数,可重写
去除抖动
五、STM32定时器之PWM呼吸灯实验
1、PWM概念
- PWM(Pulse Width Modulation):脉冲宽度调制
-
占空比:就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比
2、PWM应用
它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量,通信,功率控制与变换等许多领域。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
常见应用有:电机控制,DAC输出等
3、输出比较功能框图
输出比较就是通过定时器的计数比较控制外部引脚对外输出高低电平
比较输出有很多种模式,其中PWM模式是输出比较中使用的最多的模式。
4、STM32-PWM模式
PWM输出模式
PWM输出极性
1、高电平有效
2、低电平有效
5、STM32-PWM呼吸灯实验
利用通用定时器TIM11的通道1,实现PWM呼吸灯效果
5.1、CubeMX配置
LED灯D6端口PF7,已经设置为TIN11,直接控制TIM11就可以控制灯的亮灭。
5.2、代码实现
设置占空比函数