15、定时器(1)
1 定时器基本情况
1.1 软件定时原理
使用纯软件的方式实现定时(延时)功能,占用CPU资源且延时不精准
1.2 定时器定时原理
定时器的核心就是计数器,使用精准的时基,通过硬件方式实现定时的功能
1.3 STM32定时器分类
1、常规定时器:基本定时器、通用定时器、高级定时器
2、专用定时器:独立看门狗、窗口看门狗、实时时钟、低功耗定时器
3、内核定时器:SysTick定时器
F1系列有8个常规定时器,记为TIM1 ~ 8,其中6、7为基本定时器,2 ~ 5为通用定时器,1、8为高级定时器。
1.4 定时器区分
1、基本定时器:没有输入和输出通道,常用作时基,即定时功能
2、通用定时器:有多路独立通道,可以输入输出也可作时基
3、高级定时器:除具备通用定时器的功能外,还有死区控制的互补信号输出、刹车输入等功能
2 基本定时器
2.1 基本定时器特性
1、16为递增计数(0 ~ 65535)
2、16位预分频器(1 ~ 65536)
3、可以触发DAC
4、在更新事件时可产生中断DMA
2.2 计数模式
递增模式:计数器(CNT)从0开始递增,直到等于自动重装载寄存器(ARR)的值后停止
递减模式:计数器(CNT)从自动重装载寄存器(ARR)的值开始递减,直到等于0后停止。
中心对齐模式:计数器(CNT)从零开始递增,直到等于自动重装载寄存器(ARR)减一的值后停止,下一次循环从自动重装载寄存器(ARR)的值开始,递减到1后停止,之后的循环重复上述两个过程。
2.3 基本定时器寄存器
寄存器 | 位 | 作用 |
CR1 | 0 | 0:关闭计数器 1:使能计数器 |
7 | 0:关闭ARR寄存器缓冲 1:使能ARR寄存器缓冲 | |
DIER | 0 | 0:禁止更新中断 1:使能更新中断 |
8 | 0:禁止更新DMA请求 1:使能更新DMA请求 | |
CNT | 0 ~ 15 | 储存计数器数值 |
PSC | 0 ~ 15 | 储存预分频器数值 |
ARR | 0 ~ 15 | 存储自动重装载数值 |
2.4 定时器溢出时间计算
Tout=(ARR+1)*(PSC+1)/Ft
其中Tout是定时器的溢出时间,Ft是定时器的时钟源频率,ARR和PSC对应自动重装载寄存器和预分频寄存器的值
3 基本定时器配置
3.1 基本定时器配置步骤(中断)
1、配置基本工作参数:HAL_TIM_Base_Init()
2、MSP初始化:HAL_TIM_Base_MspInit()
3、使能更新中断并启动定时器:HAL_TIM_Base_Start_IT()
4、设置优先级,使能中断
5、编写中断服务函数:HAL_TIM_IRQHandler()
6、编写回调函数:HAL_TIM_PeriodElapsedCallback()
3.2 基本定时器初始化结构体
基本定时器初始化结构体为TIM_Base_InitTypeDef,关键成员如下
成员 | 作用 | 可选值 |
Prescaler | 设置预分频系数 | 0 ~ 65535 |
CounterMode | 设定计数模式 | 递增:TIM_COUNTERMODE_UP 递减:TIM_COUNTERMODE_DOWN 中心对齐:TIM_COUNTERMODE_CENTERALIGNED |
Period | 设置自动重装载值 | 0 ~ 65535 |
ClockDivision | 设置时钟分频因子 | 不分频:TIM_CLOCKDIVISION_DIV1 2分频:TIM_CLOCKDIVISION_DIV2 4分频:TIM_CLOCKDIVISION_DIV4 |
RepetitionCounter | 设置重复计时次数 | 0 ~ 255 |
AutoReloadPreload | 自动重装载预装载使能 | 立即生效:TIM_AUTORELOAD_PRELOAD_DISABLE 等待更新事件: TIM_AUTORELOAD_PRELOAD_ENABLE |

浙公网安备 33010602011771号