正点原子--STM32中断系统学习笔记(1)

1、什么是中断?

原子哥给出的概念是这样的:打断CPU正常执行的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断。

当发生中断时,当前执行的程序会被暂时中止,进而进入中断处理函数对中断事件进行处理,处理完毕后,又回到之前被暂停的程序继续执行。

1.1 中断的作用和意义

使得CPU在能够执行主程序的同时,对重要事件做出及时的响应,提高CPU的工作效率,高效处理紧急程序,不会一直占用CPU资源。

1. 实时控制:在确定时间内对相应事件作出响应,如:温度监控
2. 故障处理:检测到故障,需要第一时间处理,如:电梯门夹人了
3. 数据传输:不确定数据何时会来,如:串口数据接收

1.2 STM32 GPIO外部中断简图

信号从外部进来,通过GPIO输入,来到AFIO将GPIO引脚映射到EXTI线上, 通过EXTI进行中断屏蔽或上升/下降沿触发中断,之后来到NVIC中断总管家进行优先级判断, CPU以优先级从高到低处理中断。

2、嵌套向量中断控制器 NVIC

2.1 NVIC基本概念

NVIC(Nested vectored interrupt controller),嵌套向量中断控制器,属于内核(M3/4/7)。
NVIC支持256个中断(16内核+240外部),支持256个优先级允许裁剪!NVIC是一种中断控制器,用于管理中断系统和中断请求。

ST公司把256个优先级进行了裁剪(用不到那么多),变成了16个中断优先级。

STM32型号内核中断外部中断中断优先级
STM32F103xx106016
STM32F407xx108216
STM32F429xx109116

 不管是内核中断还是外部中断,都有对应中断服务函数,那么问题来了,什么是中断服务函数呢?中断服务函数就是中断的入口,当某一个中断发生之后,需要进入中断服务函数当中执行相应的中断程序,中断服务函数又被定义在了中断向量表里,追根溯源那么什么又是中断向量表呢?

2.1.1 什么是中断向量表?

首先啊,定义一块固定的内存,以4字节对齐(STM32是32位单片机,1字节是8位,所以32位就是4字节),用于存放各个中断服务函数的首地址。

中断向量表定义在启动文件(.s文件)中,当发生中断时,CPU会自动执行对应的中断服务函数,

 当正常执行程序时,CPU一直都被main函数占用,当发生中断时,这些中断服务函数会抢夺CPU的使用权,如下图所示。

OK,现在我们在工程里面找到启动文件,如下图所示,__Vectors就是中断向量表开始的位置。 上部分是内核中断有10个,下面是外部中断服务函数有60个。

 在《STM32F103系列参考手册》9.1.2 中断和异常向量 里有对中断向量表的说明,深色背景的是内核中断,位置从0开始的是外部中断,总共有60个外部中断服务函数。

2.2 NVIC相关寄存器介绍

NVIC相关寄存器位数寄存器个数备注
中断使能寄存器(ISER)328每个位控制一个中断
中断除能寄存器(ICER)328每个位控制一个中断
应用程序中断及复位控制寄存器(AIRCR)321位[10:8]控制优先级分组
中断优先级寄存器(IPR)82408个位对应一个中断,而STM32只使用高4位

《ARM Cortex-M3与Cortex-M4权威指南》的 7.8小节对NVIC寄存器有详细介绍; 

2.3 NVIC工作原理

当外部发中断,进入到NVIC,首先由中断使能和失能寄存器进行配置,来控制这些中断开与关,如上图所示,中断1失能,中断2,3,4使能,就来到了中断优先级寄存器(IPR),IPR对中断2-4根据对应的优先级进行判断,优先级越高的中断先得到CPU的控制权。

2.4 中断优先级基本概念

1抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断

2响应优先级(sub):当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断

3,抢占和响应都相同的情况下,自然优先级越高的,先执行

4自然优先级:中断向量表的优先级

5,数值越小,表示优先级越高

2.5 中断优先级分组

举例说明:优先级分组为1,有1位抢占优先级,3位响应优先级,那么抢占优先级就有2^1=2个,响应优先级有2^3=8个。

注意:一个工程中,一般只设置一次中断优先级分组 

中断优先级举例(假设分组是2)

编号自然优先级对应外设抢占优先级响应优先级执行顺序
310RTC212
613EXTI0304
714EXTI1201
-16Systick303

由表中可知RTC和EXTI1的抢占优先级都为2,但是响应优先级不同,EXTI1的响应优先级为0,RTC的响应优先级为1,数值小的先执行,所以EXTI1是第一个执行,第二个是RTC;而EXTI0和Systick的抢占优先级和响应优先级都相同,这个时候就要看自然优先级,数值越小,就先执行,所以systick是第三个执行,第四个是EXTI0。

而高抢占优先级可以打断正在执行的低抢占优先级中断,比如EXTI0/Systick正在执行,这时RTC就可以打断它先执行。但是响应优先级高的不能打断响应优先级低的。

2.6 NVIC的使用(HAL库)

1. 设置中断分组     HAL_NVIC_SetPriorityGrouping

2. 设置中断优先级     HAL_NVIC_SetPriority

3. 使能中断      HAL_NVIC_EnableIRQ

3、外部中断/事件控制器 EXTI

主线任务:学习中断EXTI主要掌握EXTI线0~15与GPIO 引脚的对应关系

3.1 EXTI基本概念

External(Extended))interrupt/event Controller,外部(扩展)中断事件控制器,其中包含20个产生事件/中断请求的边沿检测器,即总共:20条EXTI线(F1系列)

中断和事件的理解:
中断:要进入NVIC,有相应的中断服务函数,需要CPU处理
事件:不进入NVIC,仅用于内部硬件自动控制的,如:TIM、DMA、ADC

3.2 EXTI主要特性

F1/F4/F7系列
每条EXTI线都可以单独配置:选择类型(中断或者事件)、触发方式(上升沿,下降沿或者双边沿触发)、支持软件触发、开启/屏蔽、有挂起状态位

3.3 EXTI工作原理

这里的输入线就是EXTI线,这些输入线可以通过寄存器设置为任意一个 GPIO,从《STM32F103数据手册》中我们得知,F1系列有20根,非互联型有19根;

接下来我们分析下这部分框图: 

首先我们来看第①部分:信号从某一条EXTI线输入进来,经过边沿检测电路,到达或门,那么信号如何通过边沿检测电路呢?就由上升沿触发选择寄存器下降沿触发选择寄存器这俩寄存器决定了,这俩都是32位寄存器,但它们的有效位却是由EXTI线的条数决定的,eg:F1有20条EXTI线,那么上升沿&下降沿触发选择寄存器就是20位有效。当上升沿触发选择寄存器的对应位置1,此时输入线来了一个上升沿,那么允许该信号通过边沿检测电路,而要是此时来一个下降沿,那就不允许它通过;同理,当下降沿触发选择寄存器的对应位置1,此时输入线来了一个下降沿,那么就允许该信号通过边沿检测电路,而要是此时来一个上升沿,那就不允许它通过;

第②部分:当信号通过边沿检测电路来到或门,此时或门一个输入为1,那么输出也就为1(或门:有1为1),而不用去理会软件中断事件寄存器的状态,从而实现硬件触发中断;而如果边沿检测电路是0,此时决定或门输出1的就是软件中断事件寄存器了,从而实现软件触发中断

第③部分: 不管是通过软件中断还是硬件中断触发,或门的输出都是1,那么请求挂起寄存器的对应位也置1,这时与门的一个输入就为1,要想与门输出为1,必须中断屏蔽寄存器的对应位也为1才行,这样才能把信号输入到NVIC中断控制器,如果中断屏蔽寄存器的对应位为0,那么与门输出为0,也就阻止了信号输入到NVIC中断控制器中,也就无法产生中断。所以,中断屏蔽寄存器的作用就体现出来了!!通过控制中断屏蔽寄存器(EXTI_IMR)来控制中断的产生。

第④部分:同理,事件屏蔽寄存器对应位为1时,信号会通过与门脉冲发生器输入到某个外设,从而产生事件,控制其他外设实现某种功能。

具体细致的讲解大家可以观看“正点原子”这部分 :第58讲 入门篇-EXTI工作原理(F1 F4 F7)_哔哩哔哩_bilibili

4、EXTI和IO映射关系

4.1 EXTI支持的外部中断/事件请求

4.2 AFIO简介(F1)

Alternate Function IO,即复用功能IO,主要用于重映射外部中断映射配置

 我们主要用到AFIO_EXTICR1~4这四个寄存器,用来配置EXTI中断线0~15对应的IO口。

4.3 EXTI与IO对应关系 

 也就是说,EXTI0对应PA~PG的引脚0,而EXTI0[3:0]写入的值对应的是PA还是PB、PC...PG端口号;

EXTI x ----->引脚 0 ~ 15

EXTI x [3:0]------->PA~PG端口号 

5、如何使用中断 

USART/TIM/SPI等产生的外设中断,不会进入EXTI,而是由外设自己的寄存器配置,开启相应的外设中断,直接进入NVIC。

6、HAL库中断回调处理机制介绍

发生中断,进入中断服务函数,在中断服务函数里面调用HAL库中断处理公用函数,中断处理公用函数里面用来进行异常处理,清中断标志,以及调用各种数据处理回调函数(发生什么中断,调用什么回调函数)。

下篇笔记是实战部分,通过按键实现外部中断控制LED灯亮灭。


本篇完。

本人博客仅代表个人见解方便记录成长笔记。

若有不足,请指出,感谢您的阅读!

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

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

相关文章

05:容器镜像技术揭秘|发布容器服务器|私有镜像仓库

容器镜像技术揭秘|发布容器服务器|私有镜像仓库 创建镜像使用commit方法创建自定义镜像。Dockerfile打包镜像创建apache服务镜像制作 php 镜像 微服务架构创建nginx镜像 发布服务通过映射端口发布服务容器共享卷 docker私有仓库 创建镜像 使用commit方法…

Hadoop3.x基础(3)- MapReduce

来源: B站尚硅谷 目录 MapReduce概述MapReduce定义MapReduce优缺点优点缺点 MapReduce核心思想MapReduce进程常用数据序列化类型MapReduce编程规范WordCount案例实操本地测试提交到集群测试 Hadoop序列化序列化概述自定义bean对象实现序列化接口(Writable&#xff…

Nicn的刷题日常之BC68 X形图案

1.题目描述 KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。 输入描述: 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜…

推荐一款嵌入式系统自动化测试工具(可免费试用)

本文介绍一款对嵌入式系统进行全面自动化测试的工具,不需要自己做任何开发,就可以在项目测试中直接使用起来,支持对各类嵌入式系统进行全面自动化测试。 嵌入式系统一般是产品的核心单元,嵌入式系统是否可靠决定了整个产品的质量…

【域适应十五】Universal Domain Adaptation through Self-Supervision

1.motivation 传统的无监督域自适应方法假设所有源类别都存在于目标域中。在实践中,对于这两个领域之间的类别重叠可能知之甚少。虽然有些方法使用部分或开放集类别处理目标设置,但它们假设特定设置是已知的先验设置。本文提出了一个更普遍适用的领域自适应框架,可以处理任…

【leetcode热题100】编辑距离

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 "horse", word2 "ros&qu…

政安晨的机器学习笔记——演绎一个TensorFlow官方的Keras示例(对服装图像进行分类,很全面)

导语 Keras是一个高级API接口,用于构建和训练神经网络模型。它是TensorFlow的一部分,提供了一种简洁、直观的方式来创建深度学习模型。 Keras的主要特点如下: 简洁易用:Keras提供了一组简单的函数和类,使模型的创建和…

10、数据结构与算法——堆

一、什么是堆 堆是一种特殊的树形数据结构,通常实现为完全二叉树或满二叉树。堆又分为两种类型最大堆(Max Heap) 和 最小堆(Min Heap) 1.1、什么是二叉树 二叉树是一种数据结构,它是由n(n≥0&a…

【数据分享】1929-2023年全球站点的逐日最低气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据! 之前我们分享过1929-2023年全球气象站…

面试中问到的算法题。————目录树生成

前言 我在面试中遇到了算法题,也是我第一次面试,也不知道是太紧张了还是太久没刷算法题了,感觉压有点懵的状态,所以当时面试的时候没有做出来或者说只做了一半没有做完。 面试完成后,我又重新审视了一下题目&#xff…

【MBtiles数据格式说明】GeoServer改造Springboot番外系列一

一、MBTiles数据格式 MBTiles格式是指由MapBox制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用、管理和分享的规范,是一种用于即时使用和高效传输的规范。MBTiles既可以用作栅格输入数据存储,也可以用作WMSGetMap输出格式。规范有1.0&#xf…

linux使用iptables禁用ip

iptables是什么? iptables 是一个强大的开源软件,它是 Linux 系统内核中 netfilter 包过滤框架的一部分,用来实现防火墙功能。iptables 提供了一种灵活的方式来控制和管理进出以及通过 Linux 计算机的网络流量。 前提 我在云服务器上用doc…

物联网可视化平台:赋能企业数字化转型

在数字化转型的大潮中,企业面临着如何更好地理解和利用海量数据的挑战。物联网技术的快速发展,为企业提供了一个全新的视角和解决方案。通过物联网可视化平台,企业能够实时监控、分析和展示物联网数据,从而加速数字化转型的进程。…

前端构建变更:从 webpack 换 vite

现状 这里以一个 op (内部运营管理用)项目为例,从 webpack 构建改为 vite 构建,提高本地开发效率,顺便也加深对 webpack 、 vite 的了解。 vite 是前端构建工具,使用 一系列预配置进行rollup 打包&#x…

【目标检测】对DETR的简单理解

【目标检测】对DETR的简单理解 文章目录 【目标检测】对DETR的简单理解1. Abs2. Intro3. Method3.1 模型结构3.2 Loss 4. Exp5. Discussion5.1 二分匹配5.2 注意力机制5.3 方法存在的问题 6. Conclusion参考 1. Abs 两句话概括: 第一个真正意义上的端到端检测器最…

phpMyAdmin 未授权Getshell

前言 做渗透测试的时候偶然发现,phpmyadmin少见的打法,以下就用靶场进行演示了。 0x01漏洞发现 环境搭建使用metasploitable2,可在网上搜索下载,搭建很简单这里不多说了。 发现phpmyadmin,如果这个时候无法登陆,且也…

ubuntn挂载硬盘为只读问题

做为服务器操作系统,linux是很多站长经常用到的,那么在linux系统下如果需要新增加硬盘,该怎么增加呢?下面就来详细了解一下linux系统下添加新硬盘、分区及挂载硬盘的全过程。没有服务器的朋友可以点击了解一下阿里云1折优惠云服务…

【JS】Express.js环境配置与示例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Express.js环境配置与示例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不…

力扣hot100 二叉树的右视图 DFS BFS 层序遍历 递归

Problem: 199. 二叉树的右视图 文章目录 思路&#x1f496; BFS&#x1f496; DFS 思路 &#x1f469;‍&#x1f3eb; 甜姨 &#x1f496; BFS ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) class Solution {public List<Integer&…

虹科技术|一文详解IO-Link Wireless技术如何影响工业无线自动化

导读&#xff1a;在工业无线自动化的飞速发展进程中&#xff0c;IO-Link Wireless技术成为了一项具有颠覆性的创新。它将IO-Link协议与无线连接完美结合&#xff0c;解决了传统通信技术在工业应用中的痛点。本文将深入解析IO-Link Wireless技术的原理、应用领域、优势以及实际案…