STM32Cubemx——定时器中断


前言

本文将使用定时器中断来控制LED状态定时翻转。

一、使用工具

STM32F103C8T6核心板
STM32Cubemx 版本6.0.1
Keil 版本 5.31
ST-Link

二、前置知识

1.LED

在这里插入图片描述
所使用核心板LED接线图。
当PC13口输出低电平时,LED即可点亮。

2.定时器

STM32F1 的通用定时器包含一个 16 位自动重载计数器(CNT),该计数器 由可编程预分频器(PSC)驱动。STM32F1 的通用定时器可用于多种用途,包括 测量输入信号的脉冲宽度(输入捕获)或者生成输出波形(输出比较和 PWM)等,本教程暂不讨论其他功能,仅使用定时来翻转LED状态。
对于此16位自动重装载计数器,最大计数值为:pow(2,16)
若此定时器时钟配置为72M,预分频器分频系数为PSC,则定时器计数频率为72M/(PSC+1),若计数值为ARR,则计时时间为(PSC+1)*(ARR+1)/72us.

三、STM32Cubemx配置

1.新建工程

在这里插入图片描述
选择对应单片机型号

2.配置时钟源及时钟树

在这里插入图片描述

在这里插入图片描述

3.选择调试接口及时基

在这里插入图片描述

4.配置LED

在这里插入图片描述

配置PC13口为输出模式,默认上拉,即LED熄灭,引脚重定义为LED。

5.定时器配置

在这里插入图片描述
选择内部时钟,36000分频,即0.5ms计数器加1,定时500ms,使能自动重装初值。
在这里插入图片描述
开启定时器更新中断。

6.生成工程并打开


在这里插入图片描述

点击生成工程·,打开

四、Keil编写代码

1.开启定时器中断

  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim1); //开启定时器1中断
  /* USER CODE END 2 */

2.编写服务函数

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* Prevent unused argument(s) compilation warning */
  if(htim==&htim1)
  HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);   //翻转电平
  UNUSED(htim);
  /* NOTE : This function should not be modified, when the callback is needed,
            the HAL_TIM_PeriodElapsedCallback could be implemented in the user file
   */
}

/* USER CODE END 4 */

当进入定时器溢出中断后判断是否是定时器1,若是则翻转LED电平

3.编译并烧录代码

可观察到LED亮0.5s后熄灭0.5s,循环往复

五、工程下载地址

链接:https://pan.baidu.com/s/1nFy6tMP0d3of517UUXs0Gw
提取码:wgp8

### STM32CubeMX 配置 TIM2 中断并清除中断标志位 在 STM32 微控制器中,通过 STM32CubeMX 工具可以方便地配置定时器及其相关功能。以下是关于如何在 STM32CubeMX 中配置 TIM2 的中断以及如何清除其对应的中断标志位的具体方法。 #### 1. 使用 STM32CubeMX 配置 TIM2 中断STM32CubeMX 中完成 TIM2 中断的初步配置需要遵循以下设置: - 打开 **Pinout & Configuration** 页面,在左侧外设列表中找到 `TIM2` 并启用它。 - 进入 TIM2 的参数配置页面,选择模式为 **Timer Output Compare** 或其他适合的功能模式[^3]。 - 启用 TIM2 的更新中断(Update Interrupt),这通常用于捕获计数溢出事件或其他周期性触发条件。 - 设置预分频器(Prescaler)和自动重装载寄存器(Auto Reload Register)来定义所需的计时频率。 完成后生成代码,此时 HAL 库会自动生成与 TIM2 更新中断相关的函数框架。 #### 2. 清除 TIM2 的中断标志位 为了确保程序逻辑正常运行,每次处理完 TIM2 的中断后都需要手动清除相应的中断标志位。具体操作如下: - 在 HAL 提供的标准驱动文件中,可以通过调用宏或者 API 函数实现标志位清零。例如: ```c __HAL_TIM_CLEAR_IT(&htim2, TIM_IT_UPDATE); ``` 上述语句的作用是清除 TIM2 的更新中断标志位[^3]。 - 如果项目中有多个不同类型的中断源,则需注意区分各个标志位名称,避免误操作影响到其他部分的工作状态。 #### 示例代码展示 下面给出一段简单的示例代码片段说明如何编写 TIM2 更新中断服务例程(ISR),其中包括了必要的初始化步骤及标志清理动作: ```c void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim->Instance==TIM2){ //确认当前进入的是哪个定时器产生的ISR /* 用户在此处添加自己的业务逻辑 */ //执行完毕之后记得清除该次引发此回调函数的那个特定原因(即对应于某个具体的硬件事件) __HAL_TIM_CLEAR_IT(htim,TIM_IT_UPDATE); } } ``` 以上就是利用STM32CubeMX工具配合HAL库来进行标准产品开发过程中涉及到的一个典型场景——配置并管理好定时器所产生的各种异常情况下的响应机制之一种方式介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平陆成江,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值