04 HAL库下使用定时器产生一个中断

目录

一、定时器的相关知识点

1.定时器的定义

2. 查看时钟配置

3. 定时器的分类

二、实验开始

1. 配置一个定时器

2.打开定时器的中断配置


引言

在本文的开头我想给大家分享一下单片机工作的两种工作模式轮询和中断(异步), 中断也叫做异常, 这是ARM架构的cpu的一些特性, 大家可以先有一个了解, 后续有时间的话我会在嵌入式底层原理的专题中出对应的文章供大家学习ARM的架构和工作模式啥的。没错就是轮询和中断, 轮询就是将代码全部写入一个死循环里面,大家可以思考一下, 单片机的裸机程序是不是就是这样的, 进行相关的配置之后就将代码写入一个循环里面。

一、定时器的相关知识点


1.定时器的定义

        在单片机中,定时器是一种用于生成特定时间间隔的计时器设备。它通常由一个计数器和相关的控制电路组成,可以在单片机开发中用于各种时间相关的应用,如延时、定时中断、频率计数等。 定时器通常由一个特定的时钟源提供时钟信号,这个时钟源可以是外部晶振或者是内部时钟源。定时器的计数器根据时钟信号的频率逐渐递增,当计数器的值达到设定的阈值时,触发一个定时中断或者产生一个特定的事件。 通过灵活的配置和编程,可以调整定时器的计数值、时钟源、工作模式和中断使能等参数,从而满足不同应用的时间控制需求。

         定时器在单片机中的应用非常广泛,比如实现精准的定时中断功能,用于周期性地执行特定的代码;测量外部信号频率和脉宽,如输入的脉冲宽度调制(PWM)信号;实现延时功能,控制设备的运行时间等。 不同型号的单片机会有不同的定时器模块,常见的定时器类型包括8位定时器、16位定时器、32位定时器等,每个定时器模块都具有不同的功能和特性,需要根据具体的芯片手册和开发环境来确定定时器的使用方法和配置参数。

2. 查看时钟配置

这是我目前使用的这块开发板的时钟树结构, 有点复杂,这个需要配合soc的数据手册进行分析。这个就不给大家分析了, 我找了一个简单的, 而且大家都会的, 就是stm32f103系列的soc来分析, 分析一下f3系列的时钟树配置, 和分析了这些时钟配置之后的我们需要思考的问题。

大家看, 这是f3系列soc的总线架构, 注意看我用红框框住的部分,就是各种外设, 那么我们思考一个问题, 当我们使用ADC,TIM这些功能需要设计到频率的时候, 他们都是一样的吗?

答案:不是一样的, 这个需要我们实际的需求和结合时钟树给APB1和APB2这两条总线分配合适的时钟频率, 所以我们在使用定时器计算定时时间啥的, 是不是得结合我们配置给这两条总线的时钟频率,再结合我们需要使用的定时器在那一条总线上来计算。

大家看我框住的地方是不是有四个时钟, 如果大家使用的是f3系列的soc, 那么应该是一样的,咱们看到, soc的时钟一共有四个, 那么他们具体都是拿来做什么的,各有什么有缺点?

内部高速晶振:内部频率8Mhz,频率之间会产生干扰,不稳定, cpu一般采用外部晶振。
外部高速晶振: 4-16MHz, 给cpu的, 选择内部晶振的话干扰多

内部低速:RC震荡电路,提供给看门狗使用, 看门狗的作用,cpu执行程序出问题的时候,程序出错喂狗操作就不会完成, 定时器中的值减到0之后由看门狗发送一个复位信号给cpu结束任务的运行。
外部低速晶振:32.768Khz, 提供给RTC的, 实时时钟控制器

3. 定时器的分类

  • 高级定时器: 定时功能,高级PWM控制功能(timer 1 8)

  • 通用定时器:定时功能,PWM控制功能(timer 2 3 4 5)

  • 基本定时器:定时功能(timer 6, 7)

二、实验开始


有了上面的基础, 就可以开始做实验了。

1. 配置一个定时器

一样的, 大家不需要看我的soc的引脚封装, 可能和大家的不太一样, 大家只需要选择一个定时器, 然后看我们选择的这个定时器在哪一条总线上面,根据该总线的频率计算定时器的相关参数吗然后进行设置。

大家可以看我的, 我使用的这条总线上的频率是64MHz的, 结果预分频6400-1, 这里为什么减去1, 因为寄存器啥的都是从0开始的, 接着64MHz除以6400-1是不是大于10000hz, 也就是一秒钟可以数10000个数, 那么我在计数器值的寄存器里面填写10000-1, 是不是一秒之后, 我的定时时间就到了。

2.打开定时器的中断配置

如图, 接着就配置好了, ctrl+s保存生成我们的配置代码, 也可以点击这里

老规矩哈, 大家想代码规范一点的话, 就去生成对应的.c和.h文件的选项勾上,在这个位置

接着我们去到我们工程中的这个文件下

为什么要去到这个文件下, 因为在各个soc的启动代码里面, 启动代码一般就会把异常向量表的位置准备好, 当ARM的工作模式发生改变时, 就会跳转到对应位置的异常向量表的位置去执行, 我们在这个异常向量表的位置填写一个跳转指令再让其跳转到c语言的函数中来执行。

大家看, 是不是进来之后看到我们对应的异常处理函数了,接下来也是一样的步骤, 在我们的工程中重写

当定时器的计数值到了之后,就会调用这个函数, 如何找到这些函数, ctrl+f, 或者鼠标右键打开声明, 再找不到就打开对应硬件资源的头文件里去找。

接着在这个函数里大家就可以实现自己的逻辑了, 但是请注意, 中断的处理函数中不能有太耗时的操作, 否则会让cpu直接崩溃, 找不到返回的地址。原因是啥我们不知道, 但是有点可以确定, 那肯定时arm架构的cpu的硬件或者时cpu的硬件特性所影响和导致。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文搞懂什么是缓存穿透、缓存雪崩、缓存击穿三个概念,以及解决方案

先理解概念:【注:我们这里说的是分布式、高并发环境】 一、缓存穿透是什么? 缓存穿透是指:请求【可以有很多】的数据在缓存、关系型数据库中都不存在,每次来查询都会查询到关系型数据库中。 解决方案: 1、将…

打破数据孤岛:ChatGPT如何打通金融大数据的任督二脉?

文章目录 一、引言二、ChatGPT与金融大数据分析的融合三、实践应用:ChatGPT在金融大数据分析中的优势与挑战四、案例分析:ChatGPT在金融大数据分析中的应用案例五、前景展望:ChatGPT在金融大数据分析领域的未来发展《AI时代Python金融大数据分…

Qt5 安装教程 - 跳过登录界面

Qt5 安装教程 - 跳过登录界面 引言一、下载二、安装三、使用四、修改、维护、卸载 引言 Qt5.14.2及以前的版本有离线安装包,无需登录 (老版本连登录界面也无)。之后的版本需登录进行在线安装。 本文以Qt5.12.2版本为例,说明如何跳过登录界面&#xff0c…

如何解决企业内部FTP文件传输速度过慢和安全问题

在数据化时代里,企业内部的文件传输永远是刚需,而因为 FTP协议的简单、易用、广泛支持等优点,让很多企业早期都普遍使用,随着数量量的增多,和对安全的要求越来越高,FTP也暴露出了一些列问题,小编…

算法逆袭之路(1)

11.29 开始跟进算法题进度! 每天刷4题左右 ,一周之内一定要是统一类型 而且一定稍作总结, 了解他们的内在思路究竟是怎样的!! 12.24 一定要每天早中晚都要复习一下 早中午每段一两道, 而且一定要是同一个类型, 不然刷起来都没有意义 12.26/27: 斐波那契数 爬…

使用 Tkinter 制作一个进制转换工具,好用!

在平时工作学习当中,我们经常会编写一些简单的 Python GUI 工具,以此来完成各种各样的自动化任务,比如批量处理文件,批量处理图片等等。当我们进行这些工具的编写之时,往往只关注了功能的实现,而忽略了页面…

Android 跨进程之间通信(IPC)方式之ContentProvider

Android 跨进程之间通信 Android 跨进程之间通信(IPC)方式之BroadcastReceiverAndroid 跨进程之间通信(IPC)方式之ContentProvider 文章目录 Android 跨进程之间通信前言一、ContentProvider 是什么?二、如何利用ContentProvider跨进程通信1.创建自定义ContentProv…

伺服电机:原点复位

一、原点复位概念 原点复位指的是,在驱动器使能时,触发原点复位功能后,电机将主动查找零点,完成定位功能。 那么问题来了,什么是原点,什么是零点? 原点:即机械原点,可…

面向对象知识点

类和对象知识点梳理 1. 类和对象的概念 类是对一类事物的描述,是抽象的、概念上的定义。Java 中定义类的关键字是:class。 具有相同特征和行为的对象抽象成类,类描述了这一类对象的属性和方法: 属性(成员变量&#x…

分布式技术之数据复制技术

文章目录 什么是数据复制技术?数据复制技术原理及应用同步复制技术原理及应用异步复制技术原理及应用半同步复制技术原理及应用三种数据复制技术对比 什么是数据复制技术? 数据复制是一种实现数据备份的技术。数据复制技术,可以保证存储在不…

3D目标检测(教程+代码)

随着计算机视觉技术的不断发展,3D目标检测成为了一个备受关注的研究领域。与传统的2D目标检测相比,3D目标检测可以在三维空间中对物体进行定位和识别,具有更高的准确性和适用性。本文将介绍3D目标检测的相关概念、方法和代码实现。 一、3D目…

回溯法寻找元素之和等于目标值的子集

这是一个回溯法的算法,可以用来寻找所有元素之和等于目标值的子集. 整个算法中最重要的是:在递归之后"恢复现场" 也就是: t[cnt]0; cnt--; 完整代码(注释部分打印信息可以用来辅助理解递归过程)&#xff1a; #include<iostream> #include<cstring> …

RFC7636-PKCE

前言 PKCE &#xff08;RFC 7636&#xff09; 是授权代码流的扩展&#xff0c;用于防止 CSRF 和授权代码注入攻击。 PKCE 不是客户端身份验证的一种形式&#xff0c;PKCE 不能替代客户端密码或其他客户端身份验证。即使客户端使用客户端密码或其他形式的客户端身份验证&#…

oracle物化视图

物化视图定义 视图是一个虚拟表&#xff08;也可以认为是一条语句&#xff09;&#xff0c;基于它创建时指定的查询语句返回的结果集&#xff0c;每次访问它都会导致这个查询语句被执行一次&#xff0c;为了避免每次访问都执行这个查询&#xff0c;可以将这个查询结果集存储到…

【STM32】STM32学习笔记-输入捕获测频率和占空比(18)

00. 目录 文章目录 00. 目录01. 预留02. 输入捕获测频率接线图03. 输入捕获测频率示例04. 输入捕获测频率和占空比接线图05. 输入捕获测频率和占空比示例06. 示例程序下载07. 附录 01. 预留 02. 输入捕获测频率接线图 03. 输入捕获测频率示例 pwm.h #ifndef __PWM_H #define…

从入门到精通UNet: 让你快速掌握图像分割算法

文章目录 一、UNet 算法简介1.1 什么是 UNet 算法1.2 UNet 的优缺点1.3 UNet 在图像分割领域的应用 二、准备工作2.1 Python 环境配置2.2 相关库的安装 三、数据处理3.1 数据的获取与预处理3.2 数据的可视化与分析 四、网络结构五、训练模型5.1 模型训练流程5.2 模型评估指标5.…

【JS逆向】逆向案例之 ----- 安某客滑块

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 安某客滑块小结 1. 初步分析 总共分为两步&#xff0c; 获取滑块图片信息检查滑块移动是否正确 整体框架如下&#xff1a; 1.1 getinfoTp 获取图片信息…

Plantuml之JSON数据语法介绍(二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Nx市工业数据洞察:Flask、MySQL、Echarts的可视化之旅

Nx市工业数据洞察&#xff1a;Flask、MySQL、Echarts的可视化之旅 背景数据集来源技术选型功能介绍创新点总结 背景 随着工业化的不断发展&#xff0c;Nx市工业数据的收集和分析变得愈发重要。本博客将介绍如何利用Flask、MySQL和Echarts等技术&#xff0c;从统计局获取的数据…

【Java进阶篇】JDK新版本中的新特性都有哪些

JDK新版本中的新特性都有哪些 ✔️经典解析✔️拓展知识仓✔️本地变量类型推断✔️Switch 表达式✔️Text Blocks✔️Records✔️封装类✔️instanceof 模式匹配✔️switch 模式匹配 ✅✔️虚拟线程 ✔️经典解析 JDK 8中推出了Lambda表达式、Stream、Optional、新的日期API等…
最新文章