- 定时器简介
定时器,核心就是计数器。
STM32的定时器不仅具有基本定时器中断功能,还具备捕获脉冲宽度,PWM输出,互补输出以及编码器计数等功能。
F103中共有8个定时器,TIM1-TIM8,不同定时器功能不一样,可分为三类
定时器类型 | 主要功能 |
基本定时器 | TIM6和TIM7,没有输入输出通道,常用作时基,即定时功能 |
通用定时器 | TIM2-TIM5,具有多路独立通道,可用于输入捕获/输出比较,也可用作时基 |
高级定时器 | TIM1和TIM8,除具备通用定时器所有功能外,还具备带死区控制的互补信号输出, |
- 定时器定时原理
使用精准的时基,通过硬件的方式,实现定时功能
注意:PSC(预分频器)16位(0-65535)有自加一的特性;假设预分频给0,+1=1;前面给两个波,经过预分频出去还是两个波;预分频给1,+1=2,前面给两个波,经过预分频出去就是1个波;预分频给1,+1=2,前面给4个波,经过预分频出去就是2个波;
TIM CLK:计数频率
TOUT:单位s
- 基本定时器实战
目的:学会1基本定时器的更新中断,LED1用于指示定时器发生更新事件的频率,每500ms状态取反一次。
- 确定计数器工作频率Tout;
- 周期确定为500ms则得出,PSC=7199,ARR=4999
接下来,开始我们的实践操作
auto-reload preload自动重装载值的缓冲区:如果我们不使能,我们一改ARR的值他就立马生效,如果我们使能了,这个缓冲区必须等你这一次的更新事件发生之后他才生效;
Trigger Output(TRGO)是他的触发模式,这里我们不需要用到。
配置好定时器,然后我们去配置中断NVIC,然后勾选在TIM6 global interrupt这里有一个TIM6的全局中断,抢占优先级设置为5;
然后生成代码,跟基本定时器有关的只有一个更新中断TIM FLAG UPDATE;
首先,我们要写HAL_TIM_Base_Start_IT(&htim6);开启中断,以及使能计时器。
定时器时间一到,进入HAL_TIM_PeriodElapsedCallback()函数中。