文章目录

  • 摘要
  • 配置工程
  • 配置定时器参数
  • 使能定时器
  • 配置定时器参数
  • 开启定时器中断
  • 生成工程
  • 编写用户程序
  • 编写中断回调函数
  • 启动定时器
  • 编译下载程序


摘要

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

配置工程

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

配置定时器参数

使能定时器

打开Stm32Cubemx配置文件

cuubemax 定时器配置 cubemx定时器中断_cuubemax 定时器配置

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

配置定时器参数

  经过查看STM32单片机的数据手册,可知,TIM1挂载在APB2总线下,

cuubemax 定时器配置 cubemx定时器中断_arm_02


  APB2的时钟为100MHz,如果想要使其500ms中断一次,那么可以通过10000分频后,使其速度降为10KHz,那么每计数5000次就是500ms。计算机中数字都是以0为第一位,所以参数都需要减一。

cuubemax 定时器配置 cubemx定时器中断_arm_03

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

打开自动重载,设置auto_reload prelode 为ENABLE。

开启定时器中断

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

cuubemax 定时器配置 cubemx定时器中断_stm32_04

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

cuubemax 定时器配置 cubemx定时器中断_arm_05

生成工程

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

编写用户程序

编写中断回调函数

   打开定时器HAL库,

cuubemax 定时器配置 cubemx定时器中断_arm_06


  找到HAL_TIM_PeriodElapsedCallback函数,双击跳转。这个函数HAL为用户提供的定时器的回调函数,所有定时器中断都在此函数中处理。

  复制函数名称void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

cuubemax 定时器配置 cubemx定时器中断_arm_07


  在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灯的状态
   }
}

cuubemax 定时器配置 cubemx定时器中断_arm_08

启动定时器

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

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

cuubemax 定时器配置 cubemx定时器中断_cuubemax 定时器配置_09

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

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

编译下载程序

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

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

STM32程序下载0:STM32CubeProgrammer安装STM32程序下载1:通过keil-ST-Link方式下载STM32程序下载2:通过STM32CubePro-ST-Link下载STM32程序下载3:通过STM32CubePro-UART下载STM32程序下载4:通过STM32CubePro-USB下载

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