文章目录
- 前言
- 一、基础知识
- 1、常见的定时器资源
- 2、定时器中断频率计算
- 二、CubeMx硬件配置
- 1、硬件配置步骤:
- 2、CubeMx硬件配置
- 3、定时器配置
- 三、proteus仿真电路搭建
- 四、代码编写
- 1、定时器时间间隔参数
- 2、虚函数寻找及函数重写
- 3、开启定时器
- 五、仿真测试
- 1、配置芯片晶振频率与CubeMx一致
前言
利用HAL库开发实现功能:使用TIM2实现定时,每隔1秒实现双闪功能
一、基础知识
1、常见的定时器资源
1.系统滴答定时器 SysTick
集成在Cortex M3内核的定时器,主要目的是给RTOS提供时钟节拍做时间基准。比如HAL库函数中的HAL_Delay()就是基于这个定时器开发的。如果要做嵌入式Linux的相关项目,要和上位机进行通讯的话,这个函数就不能用了。
2.看门狗定时器 WatchDog
3.实时时钟 RTC
4.基本定时器 TIM6、TIM7
5.通用定时器 TIM2、TIM3、TIM4、TIM5
在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。这类定时器最具代表性,使用也最为广泛
6.高级定时器 TIM1、TIM8
2、定时器中断频率计算
首先,定时器中断频率的设置只需要关注:1)定时器输入时钟的频率;2)预分频值*(Prescaler);3)自动重装值(Counter Period)*
公式:
提示:1M=10的6次方 即:1M=1000000例:
二、CubeMx硬件配置
1、硬件配置步骤:
1.设置Clock Source时钟源
2.根据需求设置参数Prescaler和Counter Period
3.配置NVIC嵌套向量中断控制器
4.用户重写定时器溢出回调函数,实现具体的中断逻辑
2、CubeMx硬件配置
3、定时器配置
由于我们需要使用TIM2定时,所以我们在Timers模块下找到TIM2
【第一步】
设置Clock Source时钟源为Internal Clock(内部时钟),如上图所示
我们的需求定时器频率为32MHz,间隔1秒(1000ms)翻转电平
所以根据定时器发生中断时间计算方法
【第二步】
计算方法看上文
设置参数Prescaler为芯片时钟评率减1(从0开始)
设置参数Counter Period为999,如上图所示(从0开始)
【第三步】
配置NVIC嵌套向量中断控制器,勾选使能TIM2中断
三、proteus仿真电路搭建
四、代码编写
1、定时器时间间隔参数
2、虚函数寻找及函数重写
stm32f1xx.it.c文件中找我们的定时器TIM2回调函数然后右键Go To Definition Of
找到时间定时函数HAL_TIM_PeriodElapsedCallback(htim)
然后再次右键Go To Definition Of,找到我们要的虚函数
将函数复制到main.c文件中,在Private User Code区域重写代码
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7|GPIO_PIN_8);
}
}
3、开启定时器
打开stm32f1xx_hal_tim.c文件,找到函数HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
复制,调用,参数设置为&htim2即可
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */
五、仿真测试
1、配置芯片晶振频率与CubeMx一致
LED不停的闪烁