STM32CubeIDE基础学习-通用定时器中断实验

2024-04-06 02:36

本文主要是介绍STM32CubeIDE基础学习-通用定时器中断实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32CubeIDE基础学习-通用定时器中断实验


文章目录

  • STM32CubeIDE基础学习-通用定时器中断实验
  • 前言
  • 第1章 工程配置
    • 1.1 工程外设配置部分
    • 1.2 生成工程代码部分
  • 第2章 代码编写
  • 第3章 实验现象
  • 总结


前言

生活中很多应用都有用到定时器功能、计时功能等。

定时器中断可以大大降低CPU的执行负担,和前面学习的中断类似,当定时器计数触发了中断才会执行。

STM32CubeIDE基础知识学习回顾

实验目的:
学习使用定时器中断功能,实现定时控制LED翻转的功能。


第1章 工程配置

本实验以KEY按键实验的工程作为模板,在上面添加定时器相关配置即可。

1.1 工程外设配置部分

第一步:前面的LED、BEEP、KEY、RCC和SWD的相关配置都不用修改,保持默认的配置即可。

第二步:配置定时器相关功能。
按照下图标号步骤进行设置就可以。

在这里插入图片描述
主要是设置⑥处的相关参数,这些参数是需要通过公式计算出来最终确定的。本实验需要用到定时器中断功能,定时时间是500msPSC就定为7199,代入公式计算出ARR的值是4999。计数模式选择向上计数发方式,其它的参数没有用到,保持默认即可。

定时器溢出时间计算公式如下:
在这里插入图片描述

第三步:配置NVIC。

在这里插入图片描述

勾选使能中断即可。

第四步:设置优先级分组及优先级。

在这里插入图片描述
设置分组为2,本实验没有用到其它的中断,所以优先级可以随便设置,这里抢占优先级为2,响应优先级是2。

1.2 生成工程代码部分

定时器相关功能配置完成后,点击生成代码按钮就可以生成工程代码了。

可以看到代码工程生成多了一个tim.c文件和TIM3初始化函数,如下图所示:

在这里插入图片描述
进去tim.c文件可以看到里面主要存放定时器的初始化相关代码,如下图所示:

在这里插入图片描述

在这里插入图片描述

在stm32f1xx_it.h文件里面多了一个定时器中断服务程序,当触发定时器中断后,就会调用HAL库提供的HAL_TIM_IRQHandler公共中断处理函数。如下图所示:

在这里插入图片描述

进去该函数可以看到是定时器的中断处理,比如捕获通道、捕获事件、更新事件等,如下图所示:

在这里插入图片描述
如果工程无法跳转到该函数的定义处,可以按键盘快捷键ctrl+h进行搜索函数名。

本实验主要用到定时更新中断功能,定时时间到就触发中断,所以前面的那些和通道相关的就可以忽略不用管。

在这里插入图片描述

需要用到的回调函数是HAL_TIM_PeriodElapsedCallback函数,其它不用关心。

到此,就可以在工程里面添加相关代码实现功能了。

第2章 代码编写

进去HAL_TIM_PeriodElapsedCallback该函数可以发现该函数是弱定义的,如下图所示:

在这里插入图片描述

说明需要用户重新定义才行。

那么就可以将它拷贝到stm32f1xx_it.h文件里面进行功能代码的编写,如下图所示:

在这里插入图片描述

代码片示例如下:

/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3){HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_GPIO_PIN);}
}
/* USER CODE END 1 */

若时间到了设置的500ms后触发中断,让LED翻转。

这里用到了LED相关的代码,则需要把LED的头文件引入到该文件中才行。如下图所示:

在这里插入图片描述

mian函数里面已经有了定时器初始化函数,while循环里面不用添加任何代码,如下图所示:

在这里插入图片描述

第3章 实验现象

编译下载代码后,可以看到开发板的LED灯每隔500ms间隔闪烁一次。


总结

定时器中断还是相对比较简单理解的,主要是应用到了定时计时器,计数到ARR的值就溢出。触发中断后就可以让LED灯翻转。

这篇关于STM32CubeIDE基础学习-通用定时器中断实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878787

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件