基于STM32的定时器--定时中断(HAL库)

news2024/11/23 18:55:38

基于STM32的定时器--定时中断(HAL库)

  • 介绍
    • 引言
    • 定时器介绍
  • 实例
    • 项目介绍
    • 准备
    • 设计流程

介绍

引言

本文旨在介绍如何使用STM32CubeMX配置+KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。

定时器介绍

定时器是STM32微控制器中非常重要的功能模块之一,用于计时、生成精确的时间延迟、触发事件等。STM32微控制器通常具有多个定时器模块,包括通用定时器(General Purpose Timer)和高级定时器(Advanced Timer)。每个定时器模块都具有多个通道,每个通道都可以用于不同的定时和计数操作。

以下是一些常见的STM32定时器的特点和功能:

  1. 通用定时器(General Purpose Timer):STM32中常见的通用定时器包括TIM2、TIM3、TIM4等。它们通常具有以下特点:
    • 可以选择不同的时钟源和分频因子,以获得所需的定时精度。
    • 支持输入捕获功能,用于测量外部信号的脉冲宽度、周期等。
    • 支持输出比较功能,可用于生成精确的脉冲、PWM信号等。
    • 支持定时中断,可以在达到指定的定时值时触发中断。
  2. 高级定时器(Advanced Timer):STM32中常见的高级定时器包括TIM1、TIM8等。它们通常具有以下特点:
    • 具有更多的定时通道,用于更复杂的定时和计数操作。
    • 支持更高的定时精度和频率。
    • 提供更多的功能选项,如编码器接口、PWM输入捕获等。
  3. 低功耗定时器(Low-Power Timer,LPTIM):STM32中的LPTIM模块是为低功耗应用设计的定时器,具有以下特点:
    • 在低功耗模式下仍能保持活动,以提供精确的时间计数。
    • 适用于节能需求高的应用,如电池供电的系统。

使用STM32的定时器,您可以执行以下操作:

  • 计时和测量外部信号的时间参数,如脉冲宽度、周期等。
  • 生成精确的定时延迟,用于控制操作的时序。
  • 产生PWM信号,用于驱动电机、控制LED亮度等。
  • 触发中断,以响应特定的定时事件。

实例

项目介绍

此项目为了讲解如何使用定时器,每10us触发一次定时器中断。我们可以通过这个实例,进行自己的开发。

准备

  1. MCU:STM32F407(根据自己的需求选择即可,流程都一样)
  2. 库:HAL库
  3. 开发工具:STM32CubeMX
  4. 开发环境Keil 5

设计流程

  1. 使用STM32CubeMX创建一个工程

  2. RCC选取外部时钟
    ![3

  3. 选择Debug(不选不能烧录和调试)

在这里插入图片描述
4. Clock Source:定时器时钟源,选择Internal Clock

5. 然后开始配置时钟树,设置如下图所示,使定时器主频为168MHz。而TIM3是挂接在APB1上的,所以也就是要让APB1这儿最终为84MHz

6. 实现时钟配置:设置定时器中断,每10us触发中断一次。(后续canopen的最小时间单位即为此处进入一次中断的时间),每次进入定时器中断的的时间计算公式为:
t i m e = (( P r e s c a l e r + 1 )( P e r i o d + 1 )) / 定时器总线时钟源 time=((Prescaler+1)(Period+1))/定时器总线时钟源 time=((Prescaler+1)(Period+1))/定时器总线时钟源
eg:当定时器总线时钟源为84MHz,Prescaler为83,Period为9.此时定时时间为:84*10/84000000=0.00001s=10us。


7. 打开定时器中断

8. 填写生成的工程信息(工程名称,存放位置等)
在这里插入图片描述
值得注意的是,MDK的最小版本千万不要选错
9. 生成代码

  1. 成功的话会出现提示

  2. 进入工程,发现初始化代码都已经生成

  3. 进入Keil 5后,不要忘了配置debug,不然会烧录失败。
    在这里插入图片描述

  4. 我们需要开启定时器中断: HAL_TIM_Base_Start_IT(&htim3);

  5. 编写定时器中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == htim3.Instance) 
	{	
	
		//书写我们想要执行的功能
	}
}
  1. 编译一下,无错误,项目完成,每10us进入中断回调函数一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/579782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.信息安全之常用黑客攻击手段

1.自己也可以建CA系统 winserver2003 https 准备2台机器xpsp3(证书,Web),在同一网段,https通讯 –>网络内部网络(同一网段) (iso镜像才有网络和服务…这个镜像已 经安装好了(不能乱删)) sp1 2 3 的网络 改 tcp/ip 属性 ip地址112.26.0.1 和子网掩码255.0.0.0(与ip地址对应,…

opencv_c++学习(二十七)

一、单目相机模型 上图为针孔相机成像原理,蓝色坐标中的O即为镜头光心。成像原理与小孔成像相同。 单目相机映射关系如下: 将上式进行变换,就可以从三位空间映射到2维平面的公式。 相机的畸变公式如下: 二、模型投影函数 vo…

数据结构基础内容-----第五章 串

文章目录 串串的比较串的抽象数据类型串的顺序存储结构朴素的额模式匹配算法kmp模式匹配算法 串 在计算机编程中,串(String)是指由零个或多个字符组成的有限序列。它是一种基本的数据类型,在许多编程语言中都得到了支持和广泛应用…

STM32之SPI和W25Q128

目录 SPI 介绍 SPI 物理架构 SPI 工作原理 SPI 工作模式 W25Q128 介绍 W25Q128 存储架构 W25Q128 常用指令 W25Q128 状态寄存器 W25Q128 常见操作流程 实验:使用 SPI 通讯读写 W25Q128 模块 硬件接线 cubeMX配置 w25q128_write_nocheck流程图 代码&a…

如何在华为OD机试中获得满分?Java实现【最长回文子串】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

网络原理(八):HTTPS

目录 HTTP 基本工作流程 利用对称密钥进行加密 利用非对称密钥进行加密 引入了第三方权威机构加密 之前在http 协议中说到:我们现在很少有网站直接使用HTTP 协议的,而是使用HTTPS ,至于什么原因,本篇会介绍清楚。 HTTPS 其实…

C++11 -- lambda表达式

文章目录 lamaba表达式的引入lambda表达式语法lamabda达式各部分说明捕获列表说明 lamaba表达式底层原理探索 lamaba表达式的引入 在C11之前,如果我们想对自定义类型Goods排序,可以根据姓名,价格,学号按照从大到小或者从小到大的方式排序,可是,这样我们要写额外写6个相关的仿函…

以太坊学习三: Merkle树和验证

Merkle tree简介 Merkle树又称为哈希树,是一种二叉树,由一个根节点、若干中间节点和一组叶节点组成。最底层的叶节点存储数据,在它之上的一层节点为它们对应的Hash值,中间节点是它下面两个子节点的Hash值,根节点是最后…

DAY 66 数据库缓存服务——NoSQL之Redis配置与优化

缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存&am…

爆肝整理,最全单元测试-测试用例总结(全覆盖)及拿即用...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

Maven私服仓库配置-Nexus详解

目录 一、什么是Maven私服?二、Maven 私服优势三、Maven 私服搭建四、Sonatype Nexus介绍五、Nexus仓库属性和分类六、Nexus仓库配置以及创建仓库七、Nexus配置用户角色八、Maven SNAPSHOT(快照)九、项目当中配置Nexus上传依赖十、项目当中配置Nexus下载依赖十一、测…

人工智能基础部分20-生成对抗网络(GAN)的实现应用

大家好,我是微学AI,今天给大家介绍一下人工智能基础部分20-生成对抗网络(GAN)的实现应用。生成对抗网络是一种由深度学习模型构成的神经网络系统,由一个生成器和一个判别器相互博弈来提升模型的能力。本文将从以下几个方面进行阐述&#xff1…

flutter_学习记录_03_通过事件打开侧边栏

实现类似这样的侧边栏的效果&#xff1a; 可以用Drawer来实现。 1. 在Scaffold组件下设置endDrawer属性 代码如下&#xff1a; import package:flutter/material.dart;class ProductListPage extends StatefulWidget {ProductListPage( {super.key}) ;overrideState<Pro…

首发Yolov8优化:Adam该换了!斯坦福最新Sophia优化器,比Adam快2倍 | 2023.5月斯坦福最新成果

1.Sophia优化器介绍 斯坦福2023.5月发表的最新研究成果,他们提出了「一种叫Sophia的优化器,相比Adam,它在LLM上能够快2倍,可以大幅降低训练成本」。 论文:https://arxiv.org/pdf/2305.14342.pdf 本文介绍了一种新的模型预训练优化器:Sophia(Second-order Clippe…

低资源方面级情感分析研究综述

文章目录 前言1. 引言2. 问题定义、数据集和评价指标2.1 问题定义2.2 任务定义2.3 常用数据集 3. 方面级情感分析的方法3.1 **方面词抽取**3.1.1 基于无监督学习的方法3.1.1.1 基于规则的方面词抽取3.1.1.2 基于统计的方面词抽取 3.1.2 基于有监督浅层模型的方法3.1.3 基于有监…

【C++初阶】类和对象(下)之友元 + 内部类 + 匿名对象

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

一台服务器通过nginx安装多个web应用

1.首先安装nginx网站服务器 yum install nginx 2.nginx 的主配置文件&#xff1a;/etc/nginx/nginx.conf (一台服务器有两个域名部署) 我们在/etc/nginx/nginx.d/下创建一个conf文件&#xff0c;这个文件会被嵌套到主配置文件当中 server { listen 80; …

《数据库应用系统实践》------ 个人作品管理系统

系列文章 《数据库应用系统实践》------ 个人作品管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&…

Netty客户端与服务器端闲暇检测与心跳检测(三)

网络应用程序中普遍存在一个问题&#xff1a;连接假死&#xff0c;连接假死现象是:在某一端(服务器端|客户端)看来,底层的TCP连接已经断开,但是应用程序没有捕获到,因此会认为这个连接还存在。从TCP层面来说,只有收到四次握手数据包,或者一个RST数据包,才表示连接状态已断开; 连…

Spring练习二ssm框架整合应用

导入教程的项目&#xff0c;通过查看源码对aop面向切面编程进行理解分析 aop面向编程就像是我们给程序某些位置丢下锚点&#xff08;切入点&#xff09;以及当走到锚点时需要调用的方法&#xff08;切面&#xff09;。在程序运行的过程中&#xff0c; 一旦到达锚点&#xff0c;…