-
定时器概述
-
软件定时原理:使用纯软件(CPU死等)的方式实现定时(延时)功能。
-
void delay(int us)
{
us *= 70; //这里根据需要自行调整参数
while(us--);
}
- 缺点:延时不精准,CPU死等浪费资源。
- 定时器中的软件定时为什么会导致延时不精准:
- 操作系统调度延迟
- 时钟源分辨率限制
- 中断屏蔽与延迟
- 软件实现逻辑缺陷
- 多核竞争与同步
-
定时器定时原理
- 使用一个精准的时钟源,通过硬件的方式实现定时。
- 核心:计数器(不一定是递减)
-
- 定时器分类:
- 基本定时器,通用定时器,高级定时器功能区别:
2.基本定时器
- 基本定时器简介:TIM6/TIM7
- 主要特性:16位递增计数器(0~65535),16位预分频器,触发DAC,计数器溢出时可产生中断/DMA请求。
- 基本定时器框图:
- 基本定时器计数模式及溢出条件:
- 定时器时间溢出计算方法:
- 定时器中断实验配置步骤:
- 配置定时器基础工作参数:HAL_TIM_Base_Init()
- 定时器基础MSP初始化: HAL_TIM_Base_MspInit(),配置NVIC,CLOCK等
- 使能更新中断并启动计数器:HAL_TIM_Base_Start_IT()
- 设置优先级,使能中断:HAL_NVIC_SetPriority(),HAL_NVIC_EnablelRQ()
- 编写中断服务函数:在TIMx_IRQHandler()中调用HAL_TIM_IRQHandler()
- 编写定时器更新中断回调函数:HAL_TIM_PeriodElapsedCallback()
3.定时器中断实验
- 实现功能:使用定时器6,实现500ms定时器更新中断,在中断里翻转LED0
- 500ms=%定时器时钟频率(APB1总线36Mhz*2=72Mhz)
- btimer.h文件
- btimer.c文件
- main.c文件
- 在这里有个问题就是需要在设备文件的HAL库驱动文件中添加两个源文件
- 没有这两个文件的话会出现找不到一些函数的声明,他会提示这些函数未引用。