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

2024-01-01 02:44

本文主要是介绍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的硬件特性所影响和导致。

这篇关于04 HAL库下使用定时器产生一个中断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据