STM32CubeMX系列教程3:基本定时器中断

摘要

  本章讲解STM32基本定时器中断的使用方法,实现通过定时器中断,定时500毫秒,让LED灯的状态每隔500ms改变一次。本章的工程可以从前一章节的工程中复制修改完成。

配置工程

  复制 创建的工程目录GPIO_test,修改文件目录名称为TIM,双击打开GPIO_test.ioc。

配置定时器参数

使能定时器

打开Stm32Cubemx配置文件

①-②进入定时器设置 ③使能定时器时钟源,选择内部时钟源Internal Clock。

配置定时器参数

  经过查看STM32单片机的数据手册,可知,TIM1挂载在APB2总线下,   APB2的时钟为100MHz,如果想要使其500ms中断一次,那么可以通过10000分频后,使其速度降为10KHz,那么每计数5000次就是500ms。计算机中数字都是以0为第一位,所以参数都需要减一。

①定时器分频值,这里为10000分频。 ②计数模式,默认向上计数。 ③定时器重载值,这里设为5000。 ④内部时钟分频,默认不分频即可。
打开自动重载,设置auto_reload prelode 为ENABLE。

开启定时器中断

启动定时器1的更新中断。

设置中断优先级,在实际工程项目中,当中断过多时,才需要设置中断优先级,测试工程无需设置。

生成工程

  配置好STM32CubeMX后,生成工程,打开工程。

编写用户程序

编写中断回调函数

   打开定时器HAL库,   找到HAL_TIM_PeriodElapsedCallback函数,双击跳转。这个函数HAL为用户提供的定时器的回调函数,所有定时器中断都在此函数中处理。   复制函数名称void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)   在main.c文件的末尾,在 USER CODE BEGIN 4 与 USER CODE END 4 之间重写中断回调函数。并在回调函数中写入用户代码。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
          
      if(htim == &htim1)  //判断中断是否来自于定时器1
   {
          
   
   	HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);  //翻转LED灯的状态
   }
}

启动定时器

  回到主函数mian.c,在USER CODE BEGIN 2与USER CODE END 2之间加入用户初始化函数,这里添加定时器的启动代码。

HAL_TIM_Base_Start_IT(&htim1);       //通过这行代码,以中断的方式启动定时器。

定时器的启动方式还有两种:

HAL_TIM_Base_Start_DMA(); 以DMA的方式启动,可以通过DMA直接访问定时器的计数值。 HAL_TIM_Base_Start(); 以轮询的方式启动,不进入中断,仅计数。通过程序主动查询寄存器获取状态

编译下载程序

  程序编译完成并下载后,LED灯每隔500ms改变一次状态。

  STM32单片机程序下载方法有多种,有需要请跳转

  选择你所需要的程序下载方法。

经验分享 程序员 微信小程序 职场和发展