STM32的中断(什么是外部中断和其他中断以及中断号是什么)

embedded/2024/11/25 17:38:30/

一、什么是EXTI 和NVIC

EXTI(External Interrupt/Event Controller)EXTI 是外部中断/事件控制器,它负责处理外部信号变化,并将信号传递给中断控制器(如 NVIC)。主要负责以下功能:

  1. 外部事件检测:EXTI 用于检测来自 GPIO 引脚 的外部信号(如按键、传感器、外部设备等),并将其转化为中断事件。
  2. 信号触发配置:可以配置触发条件,如上升沿、下降沿或双边缘触发。当指定的信号发生变化时,EXTI 会触发相应的中断事件。
  3. 中断线路(EXTI Line):EXTI 将每个 GPIO 引脚映射到一个 外部中断线路(EXTI Line),例如 EXTI_Line7 对应的是 PC7 引脚。
  4. 中断标志位和清除:EXTI 会设置标志位以表示某个中断事件的发生,软件可以通过清除这些标志位来确认中断已经被处理。

NVIC(Nested Vectored Interrupt Controller)NVIC 是 STM32 微控制器中的 嵌套向量中断控制器,负责处理和管理所有中断请求的优先级、响应、服务等任务。NVIC 的主要功能如下:

  1. 中断优先级管理:NVIC 管理所有中断的优先级,支持嵌套中断,允许高优先级的中断抢占低优先级的中断。
  2. 中断使能与禁用:通过 NVIC,可以使能或禁用特定的中断源。每个中断源都有一个唯一的中断号,NVIC 使用这些中断号来识别和管理中断。
  3. 中断服务程序(ISR)调度:当中断发生时,NVIC 会将控制权转交给相应的 中断服务程序(ISR),然后中断处理完毕后再恢复正常执行

二、中断流程

三、中断分类

首先分清,中断信号的产生可以通过外部中断控制器EXTI(该控制器将某个 GPIO 引脚的信号变化(如电平变化、边缘触发等)转化为中断信号),或者由其他内部外设(如定时器、DMA 等)直接产生中断信号。

所以我们要配置产生中断型号,我们就要配置EXTI或者其他控制器(定时器、DMA等)

一、外部EXTI中断

在EXTI外部中断中,也就是在GPIO直接控制下高低电平产生的中断,具体配置如下:

EXTI配置:我们要配置他的外部中断源(哪个引脚),以及触发方式,还有选择外部中断线。

1.外部中断线是什么:

注意:某个 GPIO 引脚与 EXTI 线路(如 EXTI_Line0, EXTI_Line1 等)已经是对应的了,但是为什么还要配置中断线路呢(EXTI_InitStructure.EXTI_Line = EXTI_Line7; )?原因是每个 GPIO 引脚并不是直接与 EXTI 线路关联的,而是通过 EXTI 控制器来映射。还有一点,PA0就是对应EXTI_Line0,PA1就是对应EXTI_Line1,不能搞错。

2.中断号是什么?

EXTI或者其他外设发出的中断信号就是中断号,每一个中断信号都有唯一的中断号,也可以叫中断通道号。中断通道号会交给NVIC处理,我们在配置NVIC就是在配置相应中断号的优先级。如上上面的那种图就是在配置EXTI9_5_IRQn中断号的优先级。

二、其他控制器中断

配置方式如下图:这里以定时器为例,其实没什么区别。EXTI的中断方式是上升沿或下降沿和需要配置中断线,这里的中断方式是溢出中断。


http://www.ppmy.cn/embedded/140439.html

相关文章

[UE5学习] 一、使用源代码安装UE5.4

一、简介 本文介绍了如何使用源代码安装编译UE5.4,并且新建简单的项目,打包成安卓平台下的apk安装包。 二、使用源代码安装UE5.4 注意事项: 请保证可以全程流畅地科学上网。请保证C盘具有充足的空间。请保证接下来安装下载的visual studi…

golang学习-切片

切片并不是数组或数组指针,它通过内部指针和相关属性引用数组片段,以实现变长方案。“ slice 并不是真正意义上的动态数组,而是一个引用类型。slice 总是指向一个底层 array,slice 的声明也可以像array 一样,只是不需要…

C++结构型设计模式之使用抽象工厂来创建和配置桥接模式的例子

下面是一个使用抽象工厂模式来创建和配置桥接模式的示例&#xff0c;场景是创建不同操作系统的窗口&#xff08;Window&#xff09;及其对应的实现&#xff08;WindowImpl&#xff09;。我们将通过抽象工厂来创建不同操作系统下的窗口和实现。 代码示例 #include <iostrea…

第十章 JavaScript的应用

第十章JavaScript的应用 10.1 JavaScript概述 10.1.1 JavaScript简介 10.1.1.1 简单性 JavaScript 的语法相对简单&#xff0c;易于学习和使用。它不需要复杂的编译过程&#xff0c;开发者可以直接在浏览器中编写和调试代码。例如&#xff0c;变量声明可以不指定类型&#xff…

Go与黑客(第一部分)

本篇内容是根据2021年5月份#205 Hacking with Go音频录制内容的整理与翻译 Natalie 和 Mat 从 2 位安全研究人员的角度探讨了 Go 中的黑客行为。 Joakim Kennedy 和 JAGS 都使用 Go 进行黑客攻击&#xff1a;编写恶意软件、硬件黑客、逆向工程 Go 代码等等。 过程中为符合中文…

Spring Boot应用开发实战:构建RESTful API服务

Spring Boot应用开发实战&#xff1a;构建RESTful API服务 在当今快速迭代的软件开发环境中&#xff0c;Spring Boot凭借其“约定优于配置”的理念&#xff0c;以及丰富的生态系统&#xff0c;成为了构建现代微服务架构的首选框架之一。本文将带您深入Spring Boot的世界&…

udp_socket

文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen关于inet_ntoa UDP服务器封装 系…

大数据新视界 -- Hive 数据仓库:架构深度剖析与核心组件详解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…