【【萌新的STM32学习-17 中断的基本概念2】】

news2024/11/15 11:00:32

萌新的STM32学习-17 中断的基本概念2

STM32中断优先级的基本概念
在这里插入图片描述
抢占优先级: 高抢占优先级可以打断正在执行的低抢占优先级中断
响应优先级: 这个也叫子优先级 抢占优先级相同,响应优先级高的中断不能打断响应优先级低的中断。还有一种情况就是当两个或者多个中断的抢占式优先级和响应优先级相同时,那么就遵循自然优先级,看中断向量表的中断排序,数值越小,优先级越高。

在 NVIC 中由寄存器 NVIC_IPR0-NVIC_IPR59 共 60 个寄存器控制中断优先级,每个寄存器的 8 位,所以就有了 240 个宽度为 8bit 的中断优先级控制寄存器,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。但是实际上 M3 芯片为了精简设计,只使用了高四位[7:4],低四位取零,这样以至于最多只有 16 级中断嵌套,即 2^4=16。
对于 NVCI 的中断优先级分组:STM32F103 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。
在这里插入图片描述
特别提示: 一个工程中,一般只设置一次中断优先级分组。
这到底是怎么一个说法和分配呢
我们拿STM32中断优先级2 举例 假设分组为2
那么一共4个 分为 2部分 前面2个被称为抢占优先级 后面2个位组成 响应优先级

抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。
结合实例说明一下:假定设置中断优先级分组为 2,然后设置中断 3(RTC_WKUP 中断)的抢占优先级为 2,响应优先级为 1。中断 6(外部中断 0)的抢占优先级为 3,响应优先级为 0。中断 7(外部中断 1)的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为:中断 7>中断 3>中断 6。上面例子中的中断 3 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 3 却不可以相互打断!
在这里插入图片描述
关于STM32 NVIC的使用
1.设置中断 AIRCR[10:8]
HAL_NVIC_SetPriorityGrouping

2.设置中断优先级 IPRx bit [7:4]
HAL_NVIC_SetPriority

3.使能中断 ISERx
HAL_NVIC_EnablelRQ

ST 公司把 core_cm3.h 文件的 NVIC 相关函数封装到 stm32f1xx_hal_cortex.c 文件中,下面
列出我们较为常用的函数进行,想了解更多其他的函数请自行查阅。

  1. HAL_NVIC_SetPriorityGrouping 函数
    HAL_NVIC_SetPriorityGrouping 是设置中断优先级分组函数。其声明如下:
    void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);
    ⚫ 函数描述:
    用于设置中断优先级分组。
    ⚫ 函数形参:
    形参 1 是中断优先级分组号,可以选择范围:NVIC_PRIORITYGROUP_0 到
    NVIC_PRIORITYGROUP_4(共 5 组)。
    ⚫ 函数返回值:

    ⚫ 注意事项:
    这个函数在一个工程里基本只调用一次,而且是在程序 HAL 库初始化函数里面已经被调
    用,后续就不会再调用了。因为当后续调用设置成不同的中断优先级分组时,有可能造成前面
    设置好的抢占优先级和响应优先级不匹配。
  2. HAL_NVIC_SetPriority 函数
    HAL_NVIC_SetPriority 是设置中断优先级函数。其声明如下:
    void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority,
    uint32_t SubPriority);
    ⚫ 函数描述:
    用于设置中断的抢占优先级和响应优先级(子优先级)。
    ⚫ 函数形参:
    形参 1 是中断号,可以选择范围:IRQn_Type 定义的枚举类型,定义在 stm32f103xe.h。
    形参 2 是抢占优先级,可以选择范围:0 到 15。
    形参 3 是响应优先级,可以选择范围:0 到 15。⚫ 函数返回值:无3. HAL_NVIC_EnableIRQ 函数HAL_NVIC_EnableIRQ 是中断使能函数。其声明如下:void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);⚫ 函数描述:用于使能中断。⚫ 函数形参:形参 IRQn 是中断号,可以选择范围:IRQn_Type 定义的枚举类型,定义在 stm32f103xe.h。⚫ 函数返回值:无

EXIT
基本概念
简介是外部(扩展)中断事件控制器
包含20个产生事件/中断请求的边沿检测器 ,即总共: 20条EXTI线(F1)
EXTI 即是外部中断和事件控制器,它是由 20 个产生事件/中断请求的边沿检测器组成。每一条输入线都可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。
中断和事件的
中断: 要进入NVIC,有相应的中断服务区函数,需要CPU 处理
事件: 不进入NVIC,仅用于内部硬件自动控制的,如: TIM DMA ADC
在这里插入图片描述
这里19根因为在设计的时候就没设计成互联型 互联型的是带上以太网的所以是20根

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

EXTI的工作原理
在这里插入图片描述
标号①是一个边沿检测电路,包括边沿检测电路,上升沿触发选择寄存器(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)。边沿检测电路以输入线作为信号输入端,如果检测到有边沿跳变就输出有效信号‘1’,就输出有效信号‘1’到标号②部分电路,否则输入无效信号‘0’。边沿跳变的标准在于开始的时候对于上升沿触发选择寄存器或下降沿触发选择寄存器对应位的设置,对应位的设置可以参照一下表 16.1.2.1。标号②是一个或门电路,它的两个信号输入端分别是软件中断事件寄存器(EXTI_SWIER)和边沿检测电路的输入信号。或门电路只要输入端有信号‘1’,就会输出‘1’,所以就会输出‘1’到标号③电路和标号④电路。通过对软件中断事件寄存器的读写操作就可以启动中断/事件线,即相当于输出有效信号‘1’到或门电路输入端。标号③是一个与门电路,它的两个信号输入端分别是中断屏蔽寄存器(EXTI_IMR)和标号②电路输出信号。与门电路要求输入都为‘1’才输出‘1’,这样子的情况下,如果中断屏蔽寄存器(EXTI_IMR)设置为 0 时,不管从标号②电路输出的信号特性如何,最终标号③电路输出的信号都是 0;假如中断屏蔽寄存器(EXTI_IMR)设置为 1 时,最终标号③电路输出的信号才由标号②电路输出信号决定,这样子就可以简单控制 EXTI_IMR 来实现中断的目的。标号④电路输出‘1’就会把请求挂起寄存器(EXTI_PR)对应位置 1。最后,请求挂起寄存器(EXTI_PR)的内容就输出到 NVIC 内,实现系统中断事件的控制。接下来我们看看 EXTI 功能框图的产生事件的线路。产生事件线路是从标号②之后与中断线路有所不用,之前的线路都是共用的。标号④是一个与门,输入端来自标号②电路以及来自于事件屏蔽寄存器(EXTI_EMR)。如果 EXTI_EMR 寄存器设置为 0,那不管标号②电路输出的信号是‘0’还是‘1’,最终标号④输出的是‘0’;如果 EXTI_EMR 寄存器设置为 1,最终标号④电路输出信号就由标号③电路输出的信号决定,这
样子就可以简单的控制 EXTI_EMR 来实现是否产生事件的目的。
标号④电路输出有效信号 1 就会使脉冲发生器电路产生一个脉冲,而无效信号就不会使其
产生脉冲信号。脉冲信号产生可以给其他外设电路使用,例如定时器,模拟数字转换器等,这
样的脉冲信号一般用来触发 TIM 或者 ADC 开始转换。
产生中断线路目的使把输入信号输入到 NVIC,进一步运行中断服务函数,实现功能。而产
生事件线路目的是传输一个脉冲信号给其他外设使用,属于硬件级功能。

对于第一部分就是说 我使得上升沿置1 那么我通过边沿检测器进来一个上升沿 就允许传输到第二部分 如果是置为0 那么即使上升沿来了也不会
然后来到第二部分 第二部分是一个或门 因为我们收到的一部分内容是来自于前者通过边沿检测电路的(1)
因为上面连接的是软件中断事件寄存器 意思就是这一部分和块1的是并列的 大家都通过或门只要是1 都能传入下一级
这就是属于我们在选择触发上 可以选择硬件触发还是软件触发

接下来进入第三部分模块
硬件触发得到的1到了之后还得进入一个请求挂起寄存器 (因为对我们来说想要完成一次触发 不仅要保证 时序上的正确 还要保证 系统层面上 允许中断存在,不然真就随便一个中断就打断我现在做的事情吗) 1 来了之后回自动的使得请求挂起寄存器对应位置为1,然后和中断屏蔽寄存器共同连接至一个与门上 (所以中断屏蔽寄存器必须为1才能一起通过与门传输到NVIC中断控制器上)

上升沿触发选择寄存器(EXTI_RTSR)
在这里插入图片描述
我们只用到了0到19 但是第19位是只适用于互联型的所以只用到了0到18 因为板子正好只有19根中断线 当寄存器输入1时才会允许 输入线上的上升沿触发

同理下降沿也是类似的

中断屏蔽也是同理19根线
挂机EXTI_PR也是同理
假设EXTI-8发生了选择的边沿事件, 该为被置入1 那么我们可以通过在该位写入‘1’ 来清除它

EXTI_FTSR 下降沿触发
EXTI_RTSR 上升沿触发
EXTI_IMR 中断屏蔽寄存器
EXTI_PR 请求挂起寄存器

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

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

相关文章

Linux常用命令——dhclient命令

在线Linux命令查询工具 dhclient 动态获取或释放IP地址 补充说明 dhclient命令使用动态主机配置协议动态的配置网络接口的网络参数。 语法 dhclient(选项)(参数)选项 0:指定dhcp客户端监听的端口号; -d:总是以前台方式运行程序&#x…

TCP拥塞控制详解 | 7. 超越TCP

网络传输问题本质上是对网络资源的共享和复用问题,因此拥塞控制是网络工程领域的核心问题之一,并且随着互联网和数据中心流量的爆炸式增长,相关算法和机制出现了很多创新,本系列是免费电子书《TCP Congestion Control: A Systems …

【附安装包】Jade 6.5​安装教程

软件下载 软件:Jade版本:6.5语言:英文大小:185.95M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨下载链接:https://pan.baidu.com/s/1kbD…

配置Linux内核支持make menuconfig

新环境从0配置Linux内核支持make menuconfig hudahuahudahua-virtual-machine:~/workspace/tools/linux-5.15.13$ make menuconfigCommand ‘make’ not found, but can be installed with sudo apt install make # version 4.2.1-1.2, or sudo apt install make-guile # vers…

开始MySQL之路——MySQL的DataGrip图形化界面

下载DataGrip 下载地址:Download DataGrip: Cross-Platform IDE for Databases & SQL 安装DataGrip 准备好一个文件夹,不要中文和空格 C:\Develop\DataGrip 激活DataGrip 激活码: VPQ9LWBJ0Z-eyJsaWNlbnNlSWQiOiJWUFE5TFdCSjBaIiwibGl…

乐高虚拟搭建软件Studio 2.0怎么导入缺少的零件库文件

Studio 2.0是目前非常流行的乐高虚拟拼搭软件,功能也很强大。我们在利用Studio 2.0进行虚拟拼搭的时候,经常会遇到软件自带的零件库不全的问题。像一些电机、线性执行器、传感器等比较稀有的零件,在软件自带的零件库里是没有的。 导入方法&a…

【Go 基础篇】Go语言日期与时间函数详解:时间的掌控与转化

Go语言是一种快速、简洁且高效的编程语言,它在处理日期与时间方面提供了丰富的标准库函数。本文将详细介绍Go语言中处理日期与时间的函数,涵盖常用的日期时间操作、格式化、时区转换等内容,并介绍time.Time结构体中的相关方法。 时间的表示与…

【ArcGIS微课1000例】0073:ArcGIS探索性回归分析案例

一、探索性回归工具简介 “探索性回归”工具会对输入的候选解释变量的所有可能组合进行评估,以便根据用户所指定的指标来查找能够最好地对因变量做出解释的 OLS 模型。 给定一组候选解释变量,找出正确指定的 OLS 模型: 用法: 工具还会生成一个可选表,该表包括所有满足…

【PACS】医学影像管理系统源码带三维重建后处理技术

PACS系统,意为影像归档和通信系统。它是应用在医院影像科室的系统,主要的任务就是把日常产生的各种医学影像(包括核磁,CT,超声,各种X光机,各种红外仪、显微仪等设备产生的图像)通过各…

vue中实现echarts三维散点图

需要安装 echarts 同时引入 echarts-gl 我安装的版本: "echarts": "^5.3.2", "echarts-gl": "^2.0.9", import Vue from "vue"; import * as echarts from "echarts"; Vue.prototype.$echarts echa…

Linux常用命令_帮助命令、用户管理命令、压缩解压命令

文章目录 1. 帮助命令1.1 帮助命令:man1.2 帮助命令:help1.3 其他帮助命令 2. 用户管理命令2.1 用户管理命令: useradd2.2 用户管理命令: passwd2.3 用户管理命令: who2.4 用户管理命令: w 3. 压缩解压命令3.1 压缩解压命令: gzip3.2 压缩解压命令: gunzip3.3 压缩解压命令: ta…

4.15 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?

目录 HTTP 的 Keep-Alive TCP 的 Keepalive 总结: HTTP的Keep-Alive,是应用层(用户态)实现的,称为HTTP长连接; TCP的Keepalive,是由TCP层(内核态)实现的,…

上门送卡激活会有危险吗?小心提防这些套路!

​ 现在网上申请流量卡大部分都是快递员或者工作人员上门激活的,正常情况下是没有问题的,但是有些快递员却不太“老实”,为了避免更多人上当,小编给大家分享几个案例。 正常情况下,手机号如果需要快递小哥当面激活&am…

ES 7.6 - JAVA应用基础操作篇

ES 7.6 - JAVA应用基础操作篇 环境准备依赖配置 实体类准备使用说明索引/映射操作创建索引和映射索引和映射相关查询删除索引 文档操作插入数据更新数据删除数据批量操作 文档查询根据ID查询根据字段精准查询根据字段分词查询控制返回字段范围查询组合查询排序分页高亮搜索聚合…

【计算机协议】第一章——HTTP协议详解

前言 HTTP(Hypertext Transfer Protocol)即超文本传输协议,是一种用于传输超媒体文档(例如HTML)的应用层协议。HTTP协议采用C/S(客户端/服务器)模式,客户端发起请求,服务…

机器学习笔记 - 使用 AugMix 增强图像分类模型的鲁棒性

一、简述 图像分类模型能够预测与训练数据具有相同分布的数据。然而,在现实场景中,输入数据可能会发生变化。例如,当使用不同的相机进行推理时,照明条件、对比度、颜色失真等可能与训练集不同,并显着影响模型的性能。为了应对这一挑战,Hendrycks 等人提出了 AugMix 算法。…

基于cat12和SPM12进行VBM数据分析

一、基于cat12和SPM12进行VBM数据分析 VBM 能定量计算局部灰质体素的大小和信号强度,从而能够检测出局部脑 区的特征和脑组织成分的差异。 1.前期软件安装准备: 1.1 spm12和cat12软件安装 参考这篇文章操作: https://blog.csdn.net/qq_…

4.14 HTTPS 中 TLS 和 TCP 能同时握手吗?

目录 实现HTTPS中TLS和TCP同时握手的前提: 什么是TCP Fast Open? TLS v1.3 TCP Fast Open TLSv1.3 HTTPS都是基于TCP传输协议实现的,得先建立完可靠得TCP连接才能做TLS握手的事情。 实现HTTPS中TLS和TCP同时握手的前提: 1、…

[NLP]深入理解 Megatron-LM

1. 导读 NVIDIA Megatron-LM 是一个基于 PyTorch 的分布式训练框架,用来训练基于Transformer的大型语言模型。Megatron-LM 综合应用了数据并行(Data Parallelism),张量并行(Tensor Parallelism)和流水线并…

Vue2向Vue3过度核心技术编程式导航

目录 1 编程式导航-两种路由跳转方式1.问题2.方案3.语法4.path路径跳转语法5.代码演示 path跳转方式6.name命名路由跳转7.代码演示通过name命名路由跳转8.总结 2 编程式导航-path路径跳转传参1.问题2.两种传参方式3.传参4.path路径跳转传参(query传参)5.…