首页 > 其他分享 >STM32基础篇--中断

STM32基础篇--中断

时间:2024-06-20 14:03:15浏览次数:14  
标签:优先级 -- STM32 中断 事件 输入 CPU EXTI

1.中断和异常

异常主要是指来自CPU内部的意外事件,比如执行了未定义指令、算术溢出、除零运算等发生在CPU内部的意外事件,这些异常的发生,会引起CPU运行相应的异常处理程序;

中断一般来自硬件(如片上外设、外部I/O输入等)发生的事件,当这些硬件产生中断信号时,CPU会暂停当前运行的程序,转而去处理相关硬件的中断服务程序。

但无论是异常还是中断,都会引起程序执行偏离正常的流程,转而去执行异常/中断的处理函数。如果中断信号的产生原因来自CPU内部,则称之为异常;如果中断信号来自CPU外部,则称之为中断。有些场合如果没有明确指出是异常还是中断,就统称为中断。

2.中断概念的引出(了解)

下面以计算机的发展为例子:

2.1手工操作时代(1946-1955)

通过一些插板上的硬连线(或者是纸带)来控制计算机的基本功能,程序设计全部采用机器语言,没有程序设计语言(甚至没有汇编语言),更谈不上操作系统。这时实际上所有的题目都是数值计算问题。

在程序操作期间,整台计算机连带附属设备全部被其占用。程序员兼职操作员,效率低下。

2.2单批道处理方式

为了充分利用CPU资源,通常是把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序,在它的控制下使这批作业能一个接一个的连续处理。这种方式便是单道批处理系统。

管理员先将多个作业输入到磁盘形成作业队列,操作系统一次自动处理队列中每个作业。即:装入——运行——撤出的一个过程。此种方式自动完成,效率高,运行结束通知用户取结果。

假设计算机需要处理三个作业

作业一:输入1秒,计算1秒,输出1秒

作业二:输入1秒,计算1秒,输出1秒

作业三:输入1秒,计算1秒,输出1秒

优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升

缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU 有大量的时间是在空闲等待 I/O 完成。资源利用率依然很低。

2.3多道批处理方式

为了解决单道批处理系统存在的忙闲不均的问题,就出现了多道批处理系统。一次从磁带或磁盘上同时装入多个用户作业到内存中,使这多个作业同时处于运行状态。

内存中同时驻留多个相互独立的程序,相互穿插运行,当作业J1进行计算时候(cpu占用,IO空闲),J2进行输入操作(占用了IO),当J1计算完毕将结果输出时(cpu被释放,IO被占用),J2咱用CPU进行计算......

可以看到,采用多道批处理技术能够使得资源利用率大幅度提升,CPU等资源可以并行工作而不是像单道批处理技术那样串行工作。

而缺点是没有人机交互功能(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行。e.g. 无法调试程序 / 无法在程序运行过程中输入一些参数),遇到更紧急的作业,没有优先执行权。

2.4分时处理方式

批处理程序不适合交互式的作业,对交互式工作方式的需求导致了分时系统(Time Sharing System)的出现。

分时处理方式是指一台主机上连接了多个终端,同时允许多个用户通过自己的终端,以交互的方式使用计算机,共享主机中的资源的系统。为了保证每一个终端用户都感觉是自己一个人在使用计算机资源,系统规定每个终端用户的作业能连续使用CPU的最长时间叫做时间片。时间片一到,无论请求是否完成都会暂停请求的继续执行,而去响应下一个请求。分时操作系统最典型的例子就是UNIX和Linux。

主要优点:用户请求可以被及时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户计算机的操作相互独立,感受不到别人的存在。

主要缺点:不能优先处理一些紧急任务。操作系统对各个用户 / 作业都是完全公平的,循环地为每个用户 / 作业服务一个时间片,不区分任务紧急性。

举个例子:如果作业一(J1)不能在一个时间片内完成作业,就会重新进入作业队列的队尾等待下次运行。如下图所示,作业1、2、3都不能在一个时间片内完成作业,系统就会所有的作业都在 CPU 上运行完一次以后,再第二次为之前没有运行的 J1、J2、J3 分配时间。对于运行时间不需要一个时间片的作业,如图中红色箭头所指的第二次运行时的剩余的 J1 和 J3,他们的运行时间就是实际运行时间而不是一个时间片的时间,为了提高系统运行的效率。

2.5实时处理方式

实时操作系统要求计算机系统在接收到外部信号后及时进行处理,并且要在严格的时间内处理完事件,其主要特点是及时性和可靠性。比如导弹控制系统、自动驾驶系统、订票系统等等。

主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。

举个例子:生产线上一个工作点,任务周期50s,任务需要时间30s。所以对于任务的允许的开始时间就是从 0s~20s 这样的一个时间范围。它的开始截止时间就是 20s。

何为中断?

所谓中断是指系统发生某一事件后,CPU暂停正在执行的程序转去执行处理该事件的程序过程,处理中断事件的程序称为中断服务程序,产生中断信号的那个部件称为中断源。硬件的中断机构与处理这些中断的程序统称为中断系统。

当中断发生时,硬件机构自动地进入响应中断过程,由操作系统的中断服务程序对中断事件进行处理。

中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源

中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

举例:

你在认真的敲代码,你妈喊你出房间去客厅吃饭,并且以不出来就拔网线为威胁。这时候你能怎么办?只能乖乖保存好现在的进度,然后出去恰饭,恰完之后再回来打开之前的文件继续敲咯。

我们分析一下上面的场景:

正在敲代码——正在执行的事件

你妈喊你吃饭——中断源

你听到你妈喊你吃饭——接收到中断请求

威胁你——事件优先级别高

保存已经写好的部分——保存现场(中断响应)

去吃饭——执行中断事件

吃完饭回房间——中断返回

打开文件继续敲代码——恢复现场

接下来,让我们再次回到刚刚那个场景,考虑下面两种情况:

1. 当正在吃饭的时候,你忽然又想去WC解决下个人问题。这时你会停止吃饭的这个动作,然后去WC解决完之后再回来吃饭。吃完饭才会继续。

2. 当正在吃饭的时候,你收到快递小哥的短信,告诉你丰巢的验证码可以取件的时候,你肯定会先吃完饭,然后去取完快递之后(也可能先在那放着不取)再回房间敲代码。

对于情况1而言,为了避免某些比较尴尬的事情发生,先去WC再回来吃饭几乎是必然选择。因为它比吃饭紧急。而对于情况2而言,取快递相对来说没那么急迫的需求,所以一般而言我们都会先吃晚饭,再去拿快递,最后再回房间敲代码。

当然如果敲代码比较着急,那么拿快递这件事情自然就得等到我们敲完代码之后再做了。

从上面两个场景中,我们很容易得发现中断是可以嵌套的,且它有一定的优先级概念。

3.STM32外部中断——EXTI

STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道,系统 异常10 个,除了个别异常的优先级被定死外,其它异常的优先级都是可 编程的。有关具体的系统异常和外部中断可在标准库文stm32f4xx.h 这个头文件查询到,在 IRQn_Type 这个结构体里面包含了F4 系列全部的异常声明。

3.1 EXTI基本结构

《STM32F4xx》10.2章,表45,罗列出了所有的异常和中断。

可以看到这82个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设,本章我们重点研究EXTI外部中断。

3.2 EXTI简介

外部中断/事件控制器包含多达23个用于产生事件/中断请求的边沿检测器。每根输入线都可以单独进行配置,以选择类型 (中断或事件) 和相应的触发事件(上升沿触发、下降沿触发或边沿触发)。每根输入线还可以单独屏蔽。挂起寄存器用于保持中断请求的状态线。

这23条线连接的中断请求为:

EXTI线 0~15:对应GPIO口的输入中断。

EXTI线 16:连接到 PVD输出。

EXTI线 17:连接到 RTC闹钟事件。

EXTI线 18:连接到 USB OTG FS唤醒事件。

EXTI线 19:连接到以太网唤醒事件。

EXTI线 20:连接到 USB OTG HS(在 FS中配置 )唤醒事件。

EXTI线 21:连接到 RTC入侵和时间戳事件。

EXTI线 22:连接到 RTC唤醒事件。

3.3 EXTI主要特征

1. 每个中断/事件线上都具有独立的触发和屏蔽。

2. 每个中断线都具有专用的状态位。

3. 支持多达23个软件事件/中断请求。

4. 检测脉冲宽度低于APB2时钟宽度的外部信号。

3.4 EXTI框图

通过在软件中断/事件寄存器写’1’,也可以通过软件产生中断/事件请求

EXTI 的功能框图包含了EXTI 最核心内容,掌握了功能框图,对EXTI 就有一个整体的把握,在 编程时就思路就非常清晰。

可以看到有些信号线上打一个斜杠并标注“23”字样,这个表示在控制器 内部类似的信号线路有23 个,这与EXTI 总共有23 个中断/事件线是吻合的。

红色线指示的电路流程,它是一个产生中断的线路,最终信 号流入到NVIC 控制器(稍后解释)内。

1.编号1 是输入线,EXTI 控制器有23 个中断/事件输入线,这些输入线可以为任 意一个IO的引脚,输入线一般是存 在电平变化的信号。

2.编号2 是一个边沿检测电路,它会根据上升沿触发选择寄存器(EXTI_RTSR) 和下降沿触发选择 寄存器(EXTI_FTSR) 对应位的设置来控制信号触发。

边沿检测电路以输入线作为信号输入端,如 果检测到有边沿跳变就输出有效信号1 给编号3 电路,否则输 出无效信号0。而EXTI_RTSR 和 EXTI_FTSR 两个寄存器可以控制需要检测哪些类型的电平跳变过程,可以是只有上升沿触发、只有下降沿触发或者上升沿和下降沿都触发。

3.编号3 电路是一个或门电路,它一个输入来自编号2 电路,另外一输入来自软件中断事件 寄存器(EXTI_SWIER)。EXTI_SWIER 允许我们通过程序控制就可以启动中断/事件线,这在某些 地方非常有用。我们知道或门的作用就是有1就为1,所以这两个输入随便一个有有效信号1 就 可以输出1 给编号4 和编号6 电路。

4.编号4 电路是一个与门电路,它一个输入编号3 电路,另外一个输入来自中断屏蔽寄存器 (EXTI_IMR)。与门电路要求输入都为1 才输出1,如果EXTI_IMR 设置为0 时,那 不管编号3 电路的输出信号是1 还是0,最终编号4 电路输出的信号都为0;如果EXTI_IMR 设置为1 时,最终编号4 电路输出的信号才由编号3 电路的输出信号决定,这样我们可以简单 的控制EXTI_IMR 来实现是否产生中断。

5.编号5是将挂起寄存器(EXTI_PR) 的内容输出到NVIC 内,从而实现系统中断事件控制。

绿色线指示的电路流程。它是一个产生事件的线路,最终输出一个脉冲信 号。产生事件线路是在编号3 电路之后与中断线路有所不同,之前电路都是共用的。

6.编号6 电路 是一个与门,它一个输入编号3 电路,另外一个输入来自事件屏蔽寄存器(EXTI_EMR)。如果 EXTI_EMR 设置为0 时,那不管编号3 电路的输出信号是1 还是0,最终编号6 电路输出的信号 都为0;如果EXTI_EMR 设置为1 时,最终编号6 电路输出的信号才由编号3 电路的输出信号决 定,这样我们可以简单的控制EXTI_EMR 来实现是否产生事件的目的。

7.编号7 是一个脉冲发生器电路,当它的输入端是一个有效信号1 时就 会产生一个脉冲;如果输入端是无效信号就不会输出脉冲。

8.编号8 会产生一个脉冲信号,是事件线路的最终的产物,这个脉冲信号可以给其他外设电路使 用,比如定时器TIM、模拟数字转换器ADC 等等。

产生中断线路目的是把输入信号输入到NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号 传输,属于硬件级的。

输入一个有效信号 1 时就会产生一个脉冲,如果输入端是无效信号就不会输出脉冲。这个脉冲信号可以给其他外设电路使用,比如定时器 TIM、模拟数字转换器 ADC 等等,这样的脉冲信号一般用来触发 TIM 或者 ADC 开始转换

中断与事件的区别:

中断:需要CPU参与,需要调用软件的中断服务函数才能完成中断后产生的结果

事件:靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,触发TIM计时,AD转换等,事件不要软件的参与,降低了CPU的负荷,而且硬件速度快于软件速度

3.5 使用到的的寄存器

外部中断配置寄存器

上升沿触发选择寄存器

下降沿触发选择寄存器

软件中断事件寄存器

CSDN文章icon-default.png?t=N7T8https://blog.csdn.net/k666499436/article/details/124181471

3.6 GPIO中断请求

了解了上面这些概念以后,是不是还是感觉懵懵的?

第一次学习肯定是有点难以接受,请耐心把后面的课程学习完,然后回过头来再看前面的东西就恍然大悟。

接下来我们把范围缩小,我们不研究82个中断通道,也不研究82个中断通道里的23个外部中断,我们研究23个外部中断里的16个GPIO中断。

我们刚刚提到过EXTI 有23 个中断/事件线,每个GPIO 都可以被设置为输入线,占用EXTI0 至EXTI15,还有另 外七根用于特定的外设事件(暂不学习)

这里有个问题请思考: STM32F4供 GPIO口使用的中断线只有 16个(EXTI0 至EXTI15),但是 STM32F4的 GPIO口却 远远不止 16个,那么 STM32F4是怎么把 16个中断线和 IO口一一对应起来的呢?

实际上是这么设计的:

GPIO的管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E F,G,H,I)分别对应中断线 0~15。

这 样每个中断线对应了最多 9个 IO口,以线 0为例:它对应了 GPIOA.0、 GPIOB.0、GPIOC.0、 GPIOD.0、 GPIOE.0、 GPIOF.0、 GPIOG.0,GPIOH.0,GPIOI.0。而中断线每次只能连接到 1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个 GPIO上了。

4. NVIC嵌套向量中断控制器

通过学习,我们了解到中断的概念,还了解了STM32F407具有 82 个可屏蔽中断通道,这里提一个问题:

NVIC:嵌套向量中断控制器,属于内核外设,管理这包括内核和片上所有外设的中断相关的功能。值得一提的是片上外设和内核外设都在芯片力吗,但内核外设实在内核CPU里面,片上外设就是内核之外咯。

几个关于内核外设重要的库文件:

Cortex-M3 内核的外设也比较多,但STM32并没有用到这么多内核外设对其进行了裁剪,STM32重要的内核外设用到的库函数放在了misc.c文件之中所以core_cm3.c文件用的较少。

core_cm3.c:内核外设的驱动固件库

core_cm3.h:实现了内核(CPU)里面的外设的寄存器映射,还有很多关于内核外设的库函数。

misc.h:NVIC_InitTypeDef结构体,以及库函数的参数和声明

misc.c:NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)相关函数

如果这82个中断,有多个中断请求同时申请中断,CPU改如何处理呢?

如果当前正在响应中断,此时又有一个更紧急中断请求来了, CPU该如何处理呢?

答案是NVIC(嵌套向量中断控制器)

NVIC 用于处理 Cortex-M 支持的所有中断和异常,它与 Cortex-M 内核紧密集成,控制着整个STM32芯片中断相关的功能。

在谈论嵌套向量中断控制器时,中断嵌套是主要概念。这个概念有点类似于嵌套的for循环,即在另一个中断(具有较低优先级)中处理一个中断(具有较高优先级)。这可以使用 NVIC 来实现,因为 NVIC 允许我们设置每个中断的优先级,并且具有较高优先级的中断可以抢占具有较低优先级的中断,从而导致中断中的中断,这种对中断的抢占称为中断嵌套。

正如我们前面提到的,ARM Cortex-M 微控制器有 0-255 个异常/中断,每个异常都有一个优先级,一些异常是用户可编程的。这意味着在程序执行期间某些中断将具有比其他中断更高的优先级。此外,一些中断可以配置为关键中断或不可屏蔽。这意味着它们不能被禁用。

NVIC 的作用是管理所有低优先级和高优先级中断,即使低优先级中断发生得更早,高优先级中断总是在低优先级中断之前执行。

NVIC库函数列表如下:(Cortex M3与M4权威指南7.4章节)

抢占:

是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A),抢占属性由

NVIC_IRQChannelPreemptionPriority 的参数配置。

响应:

响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达, 则先处理响应优先级高的中断, 响应属性由

NVIC_IRQChannelSubPriority 参数配置。

若内核正在执行C 的中断服务函数,则它能被抢占优先级更高的中断A 打断,由于B 和C 的抢占优先级相同,所以C 不能被B 打断。但如果B 和C 中断是同时到达的,内核就会首先响应响应优先级别更高的B 中断(高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的,而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断)。

总结:

    1. 先比较抢占优先级,再比较响应优先级
    2. 抢占优先级和响应优先级中,数字越小说明级别越高
    3. 抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高

NVIC中断优先级分组列表:

整个系统执行过程中,只设置一次中断分组

比如优先级分组为1,抢占优先级可取值为0或者1,响应优先级可取值为:000、001、010、011、100、101、110、111(0—7)

表示有2 种级别的抢占优先级(0 级,1 级),有8 种响应优先级,即在16 种中断向量之中:

有 8 种中断,抢占优先级都为0 级,而它们的响应优先级分别为0~7,

其余8 种中断,抢占优先级则都为1 级,响应优先级别分别为0~7。

NVIC_IROChannel:用来设置中断源,不同的中断中断源不一样,且不可写错,写错程序不会报错,只是不会进入中断。具体的成员配置可参考stm32f10x.h 头文件里面的 IRQn_Type 结构体定义,这个结构体包含了所有的中断源。

寄存器一位对应着一个中断!!!

5. 生活应用

1. 键盘使用中断请求发信号给cpu

2. 紧急弹窗

3.车辆碰撞传感器中断

标签:优先级,--,STM32,中断,事件,输入,CPU,EXTI
From: https://blog.csdn.net/qq_53030130/article/details/139816197

相关文章

  • 技术革新引领钢材质量智能化检测新纪元,基于YOLOv3全系列【yolov3tiny/yolov3/yolov3sp
    随着人工智能(AI)技术的迅猛发展,其应用领域不断拓宽,正深刻改变着传统产业的运作模式。在钢材生产这一基础工业领域,AI的引入正为钢材的质量检测带来革命性的变革。在传统的钢材生产流程中,质量检测是确保产品质量的关键环节。然而,这一环节长期以来主要依赖于经验丰富的工人通过肉......
  • 一书即可通关LLM大模型!成功通关大模型,看这1本足够了... (附PDF)
    哈喽大家好!最近有粉丝朋友喊我推荐一些大模型的学习书籍,我给大家推荐这么一本书,基于gbt3、gbt4等transform架构的自然语言处理。这是一本对transform工作原理感兴趣的人必读的书籍。亚马逊的评分是九点七分,内行人在睡不着的时候恨不得把全书都背诵完毕。本书的写作目的是......
  • python-画正方形
    [题目描述]输入一个正整数n,要求输出一个n行n列的正方形图案(参考样例输入输出)。图案由大写字母组成。其中,第1行以大写字母A开头,第2行以大写字母B开头,以此类推;在每行中,第2列为第1列的下一个字母,第3列为第2列的下一个字母,以此类推;特别的,规定大写字母Z的下一个字母为大写字母A。......
  • Matlab r2023a v23.2.0 解锁版安装步骤 (工程计算商业数学软件)
    前言Matlab(矩阵实验室)是全球领先的数学计算软件开发商美国MathWorks公司研发的一款面向科学与工程计算的高级语言的商业数学软件,集算法开发、数据分析、可视化和数值计算于一体的编程环境,其核心是仿真交互式矩阵计算,广泛应用于科学计算、数据分析、算法开发和绘图设计等......
  • el-table多选分页回显
    el-table多选分页回显1.多选项添加:reserve-selection="true"<el-table-columntype="selection"align="center"width="55":reserve-selection="true"></el-table-column>reserve-selectio......
  • 【windows|007】DHCP服务详解
    ......
  • 银联网关和快捷支付的区别?
     银联网关和快捷支付都是中国银联提供的支付服务,二者主要在适用对象、支付方式、支付额度和安全性等方面存在区别。 -适用对象:银联网关主要适用于需要接受多种银行卡支付的商户;快捷支付主要适用于支付金额较小、支付速度要求较高的场景。 -支付方式:在银联网关中,商户......
  • Stable Diffusion【应用篇】【艺术写真】:一个让影楼倒闭的SD插件,使用InstantID插件一
    大家好,我是AIGC阿道夫。最近收到不少网友关于AI写真方面的留言,希望能写一些关于AI写真方面的文章。个人关注AI写真有一段时间了,网上也看到了不少写的文章教程和案例,作为一个AI绘画的狂热爱好者,自然也少不了去操作实践一下,关于AI写真,后面我会作为专题来写一系列的文章,把自己......
  • 分享:大数据信用查询选择什么样的平台好?
     在当今信息时代,大数据技术已经深刻改变了各行各业的运作方式,尤其在信用查询领域,大数据的应用更是显得尤为重要。面对众多大数据信用查询平台,如何选择一个合适的平台,成为许多企业和个人所关心的问题。本文将从几个关键角度分析,帮助您更好地选择适合自己的大数据信用查询平......
  • 基于哔哩哔哩视频库的音频提取播放器,实现下载B站音频到本地,方便把鬼畜下载到手机上,项
    importreimportjsonimportthreadingimporttimeimportosimportshutilimportsubprocessimportrequestsimportPySimpleGUIassgos.environ['PYGAME_HIDE_SUPPORT_PROMPT']="hide"frompygameimportmixersg.theme('SystemDef......