嵌入式系统开发【深入浅出】 EXTI 与 NVIC
目录
CPU 感知外部事件变化的三种方式
中断分三个级别
中断控制器
STM32 的中断和异常
NVIC 中断控制器
NVIC 结构体成员
抢占优先级和响应优先级
简单配置NVIC中断控制器
EXTI 外部中断【中断源级】
STM32系列微控制器实际上最多有23根外部中断线(EXTI0-EXTI15、PVD、RTC Alarm、USB OTG FS Wakeup、ETH Wakeup和RTC Tamper/Timestamp/Security)
要注意的是:
简单配置EXTI外部中断
中断处理函数
NVIC 和 EXTI 的区别?
编号相关问题?
外部中断号与中断号的对应关系?
引言:
EXTI (External interrupt) 就是指外部中断,通过 GPIO检测输入脉冲,引起中断事件,打断原来的代码执行流程,进入到中断服务函数中进行处理,处理完后,再返回到中断之前的代码中执行。
-
CPU 感知外部事件变化的三种方式
- 轮询、中断 、DMA【DMA 直接内存访问】
-
中断分三个级别
- 中断源级 【产生:外设 信号-->软中断】
- 中断控制级 【NVIC】
- ArmCore级
-
中断控制器
- VIC 向量中断控制器
- NVIC 可嵌套的向量中断控制器 mcu
- GIC 通用中断控制器 soc
-
STM32 的中断和异常
- 事件分为异常(exception)和中断(interrupt),并把它们用一个表管理起来,编号 为0~15的称为内核异常,而16以上的则称为外部中断(外,相对内核而 言),这个表就称为中断向量表。【异常向量表的顺序万万不可修改】
- 编号从-3至6的中断向量定义为 系统异常,编号为负的内核异常不能被设置优先级
- 编号7开始的为外部中断,这些中断的优先级都是可以自行设置的

-
NVIC 中断控制器
- NVIC是属于 Cortex 内核的器件,不可屏蔽中断 (NMI)和外部中断都由它来处理,而 SYSTICK 不是由NVIC来控制的。
-
NVIC 结构体成员
- NVIC_IRQChannel 需要配置的中断向量
- NVIC_IRQChannelCmd 使能或关闭相应中断向量的中断响应
- NVIC_IRQChannelPreemptionPriority 配置相应中断向量抢占优先级
- NVIC_IRQChannelSubPriority 配置相应中断向量的响应优先级
-
抢占优先级和响应优先级
- STM32的中断向量具有两个属性,一个为抢占属性,另一个为响应属性, 其属性编号越小,表明它的优先级别越高。

- STM32的中断向量具有两个属性,一个为抢占属性,另一个为响应属性, 其属性编号越小,表明它的优先级别越高。
-
简单配置NVIC中断控制器
void NVIC_Configuration(void) {NVIC_InitTypeDef NVIC_InitStructure = {0};/* 配置中断源的优先级 */// 配置分组 组优先级、子优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 为中断源提供中断号 */NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; // 需要配置的中断向量NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能或关闭相应中断向量的中断响应NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 配置相应中断向量抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; // 配置相应中断向量的响应优先级NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_Init(&NVIC_InitStructure); }
-
EXTI 外部中断【中断源级】

-
STM32系列微控制器实际上最多有23根外部中断线(EXTI0-EXTI15、PVD、RTC Alarm、USB OTG FS Wakeup、ETH Wakeup和RTC Tamper/Timestamp/Security)
-
1. EXTI0: 外部中断线0 2. EXTI1: 外部中断线1 3. EXTI2: 外部中断线2 4. EXTI3: 外部中断线3 5. EXTI4: 外部中断线4 6. EXTI5: 外部中断线5 7. EXTI6: 外部中断线6 8. EXTI7: 外部中断线7 9. EXTI8: 外部中断线8 10. EXTI9: 外部中断线9 11. EXTI10: 外部中断线10 12. EXTI11: 外部中断线11 13. EXTI12: 外部中断线12 14. EXTI13: 外部中断线13 15. EXTI14: 外部中断线14 16. EXTI15: 外部中断线15 17. PVD: 低压检测中断 18. RTC Alarm: 实时时钟闹钟中断 19. USB OTG FS Wakeup: USB OTG FS唤醒中断 20. ETH Wakeup: 以太网唤醒中断 21. RTC Tamper/Timestamp/Security: 实时时钟防窃取/时间戳/安全中断 -
要注意的是:
-
PAx~PGx 端口的中断事件都连接到了EXTIx,即同一时刻EXTx只能相应一个端口的事件 触发,不能够同一时间响应所有GPIO端口的事件,但可以分时复用。它可以配置为上升沿触发,下降沿触发或双边沿触发。EXTI 最普通的应用就是接上一 个按键,设置为下降沿触发,用中断来检测按键。

-
-
简单配置EXTI外部中断
void EXTI_Configuration(void) {EXTI_InitTypeDef EXTI_InitStruct = {0};/* 初始化EXIT外部事件线 为EXTI选择输入源*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);// 选择要设置为EXTI 线的端口及引脚GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);EXTI_InitStruct.EXTI_Line = EXTI_Line8 | EXTI_Line9 | EXTI_Line0;EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; // 把EXTI_Linexx的模式设置为为中断模式,也可以赋值为事件模式// EXTI_Mode_Event 这个模式不会立刻触发中断,而只是在寄存器上把相应的事件标置位置1EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿中断 EXTI_Init(&EXTI_InitStruct); }
-
-
中断处理函数
/* 中断处理函数 */ void EXTI9_5_IRQHandler(void) {// 检测EXTI信号来源 ---> 由按键触发中断while(EXTI_GetITStatus(EXTI_Line9)){// 工作内容// ....EXTI_ClearITPendingBit(EXTI_Line9); // 用于清除外部中断线上的中断挂起标志位}while(EXTI_GetITStatus(EXTI_Line8)){// 工作内容// ....EXTI_ClearITPendingBit(EXTI_Line8);}// 等等...return; } -
NVIC 和 EXTI 的区别?
-
NVIC 是中断控制器, EXTI是外部事件中断源,EXTI仅仅是NVIC上的一个中断源
-
-
编号相关问题?
-
中断号(由NVIC编号)的顺序和异常向量表的顺序相关
- 外部中断的中断号, 和GPIO管脚编号相关
-
-
外部中断号与中断号的对应关系?
- 外部中断0 (EXTI0) 对应的中断号是0 【独占一个】
- 外部中断5~9 对应的中断号是同一个 【共享一个】
相关文章:
嵌入式系统开发【深入浅出】 EXTI 与 NVIC
目录 CPU 感知外部事件变化的三种方式 中断分三个级别 中断控制器 STM32 的中断和异常 NVIC 中断控制器 NVIC 结构体成员 抢占优先级和响应优先级 简单配置NVIC中断控制器 EXTI 外部中断【中断源级】 STM32系列微控制器实际上最多有23根外部中断线(EXT…...
【Kali】简单记录
文章目录 信息收集DNS记录分析hostdigdnsenum 路由信息tcptraceroutetctrace 搜索引擎 目标识别arpingfping 识别操作系统p0f 服务枚举端口扫描nmap识别VPN服务器 漏洞映射exploitdbmsfconsole 提权arpspoofDsniff 信息收集 DNS记录分析 host host www.example.com host -a …...
【数据结构】:队列的实现
队列 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队…...
415. 字符串相加
415. 字符串相加 class Solution { public:string addStrings(string num1, string num2){//i j分别指向当前字符串的最后一位int i num1.length() - 1;int j num2.length() - 1;int add 0;string s "";//不要忽略两个串都遍历完了 但是还有一个进位while (i …...
交通 | python网络爬虫:“多线程并行 + 多线程异步协程
推文作者:Amiee 编者按: 常规爬虫都是爬完一个网页接着爬下一个网页,不适应数据量大的网页,本文介绍了多线程处理同时爬取多个网页的内容,提升爬虫效率。 1.引言 一般而言,常规爬虫都是爬完一个网页接着…...
LeetCode:1488. 避免洪水泛滥(2023.10.13 C++)
目录 1488. 避免洪水泛滥 实现代码与解析: 贪心 原理思路: 1488. 避免洪水泛滥 题目描述: 你的国家有无数个湖泊,所有湖泊一开始都是空的。当第 n 个湖泊下雨前是空的,那么它就会装满水。如果第 n 个湖泊下雨前是…...
SpringBoot 时 jar 报错 没有主清单属性
SpringBoot 时 jar 报错 没有主清单属性 参考资料 使用阿里版 Spring Initializr 创建的项目。 springboot 2.6.13 JDK 1.8 这里自动开了skip。 注释后打的 jar 包就可以运行了。 <build><finalName>${name}</finalName><plugins><plugin><…...
C/S架构学习之多进程实现TCP并发服务器
多进程实现TCP并发服务器的实现流程:一、自定义信号处理函数(sig_func函数): void sig_func(int signum){wait(NULL);}wait函数: #include <sys/types.h>#include <sys/wait.h>pid_t wait(int *wstatus);/*功能&#…...
VSCode 快速移动光标至行尾
最近在用vscode进行C编程,经常需要把光标跳到行尾去添加符号。 手动到行尾太麻烦了。 一种快捷方式是:用键盘上的“END”快捷键。 但是用这个键也不是很方便,因为“end”键离主键盘区太远。 另一种便捷的方式是:给vscode设置自定义…...
ACP.复盘方法
复盘要怎么做的有水准,让领导满意,方式方法很重要。今天给你们安利5种复盘方法,保准你省事,领导还满意。 一、KPT复盘法 7月份年中一直在做和复盘相关的事,像公司的OKR复盘、年中战略规划,不过日常很多生…...
Springboot 订餐管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
一、源码特点 springboot 订餐管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有 完整的源代码和数据库&…...
判断当前Activity是否有DialogFragment显示
DialogFragment一种情况是在当前Activity上启动,一种情况是在Fragment上启动,判断当前fragmentManager上是否有,以及遍历判断子fragment上是否有,即可确定是否有DialogFragment展示。 使用方式: // supportFragmentMa…...
开发一个npm组件包(2)
通过vueelement 原来后台 开发npm包的时候 会遇到一下几个问题 入口文件变化为package/index 需要再配置打包方法 package.json下 "scripts": {"package": "vue-cli-service build --target lib ./src/package/index.js --name managerpage --dest…...
迅为RK3568开发板Scharr滤波器算子边缘检测
本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程\04_OpenCV 开发配套资料\33”目录下,如下图所示: 在 Sobel 算子算法函数中,如果设置 ksize-1 就会使用 3x3 的 Scharr 滤波器。Scharr 算子是 Soble 算子在 ksize…...
HJ86 求最大连续bit数
目录 一、题目 二、代码 一、题目 求最大连续bit数_牛客题霸_牛客网 二、代码 #include <iostream> #include<stack> #include<vector> using namespace std; void TEN_to_TWO(int x, vector<int>& data) { //10进制转换成二进制stack<int&…...
Grafana 10 新特性解读:体验与协作全面提升
作者:徽泠(苏墨馨) 为了庆祝 Grafana 的 10 年里程碑,Grafana Labs 推出了 Grafana 10,这个具有纪念意义的版本强调增强用户体验,使各种开发人员更容易使用。Grafana v10.0.x 为开发者与企业展示卓越的新功能、可视化与协作能力&…...
Django实现音乐网站 ⒆
使用Python Django框架做一个音乐网站, 本篇主要为排行榜功能及音乐播放器部分功能实现。 目录 推荐排行榜优化 设置歌手、单曲跳转链接 排行榜列表渲染优化 视图修改如下: 模板修改如下: 单曲详情修改 排行榜列表 设置路由 视图处理…...
20基于MATLAB的车牌识别算法,在环境较差的情景下,夜间识别度很差的车牌号码可以精确识别出具体结果,程序已调通,可直接替换自己的数据跑。
基于MATLAB的车牌识别算法,在环境较差的情景下,夜间识别度很差的车牌号码可以精确识别出具体结果,程序已调通,可直接替换自己的数据跑。 20matlab车牌识别 (xiaohongshu.com)...
vue音频制作
Vue 音频制作指的是使用 Vue.js 框架开发音频制作相关的 Web 应用程序。Vue.js 是一种现代化的 JavaScript 框架,它可以帮助开发者更快速、更高效地构建交互式的 Web 应用程序。 音频制作在 Vue.js 中的实现可以通过使用一些开源音频库和插件来实现,如 …...
好莱坞编剧大罢工终于结束;与OpenAI创始人共进早餐;使用DALL-E 3制作绘本分享;生成式AI的基础设施架构 | ShowMeAI日报
👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 好莱坞编剧大罢工终于结束:简单说就是AI妥协了 https://www.wgacontract2023.org/the-campaign/summary-of-the-2023-wga-…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...
Vue3学习(接口,泛型,自定义类型,v-for,props)
一,前言 继续学习 二,TS接口泛型自定义类型 1.接口 TypeScript 接口(Interface)是一种定义对象形状的强大工具,它可以描述对象必须包含的属性、方法和它们的类型。接口不会被编译成 JavaScript 代码,仅…...
