嵌入式系统开发【深入浅出】 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-…...
为什么92%的康复科博士生还没用NotebookLM做系统评价?——2024年最新工具链适配白皮书首发
更多请点击: https://intelliparadigm.com 第一章:NotebookLM在康复医学研究中的范式革命 传统康复医学研究长期受限于多源异构数据整合困难、临床证据转化周期长、跨学科知识对齐成本高等瓶颈。NotebookLM 以“以文献为中心”的可溯源推理架构…...
Git 进阶实战:如何优雅地从“被污染”的工作区中拯救代码
这是一篇为你整理的通用技术文档,旨在解决开发中常见的“Git 仓库被编译产物污染”及“提交异常”问题。 Git 进阶实战:如何优雅地从“被污染”的工作区中拯救代码 在 Android 系统开发或大型工程项目中,我们经常遇到一个头疼的问题:执行 git status 时,发现有几十甚至上…...
计算机 AI 方向 SCI 推荐|AI / 计算机 SCI 清单:3本 2区 + 1本 3区保底,无预警、对国人极度友好,易中稿,录用率拉满好投稿,硕博 / 青年教师首选,AI 科研人必藏!
投稿实用建议(CSDN科研人专属)优先选刊:追求高影响力、评职首选「Applied Soft Computing」;追求高录用率、快速毕业首选「Neurocomputing」。避坑提醒:所有期刊均为非预警刊,自引率均在安全范围࿰…...
Taotoken Token Plan套餐为高频用户带来的长期成本优势感知
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken Token Plan套餐为高频用户带来的长期成本优势感知 对于高频使用大模型API的开发者或团队而言,项目开发中的模…...
ChartGPT终极指南:如何用AI快速生成专业图表
ChartGPT终极指南:如何用AI快速生成专业图表 【免费下载链接】chart-gpt AI tool to build charts based on text input 项目地址: https://gitcode.com/gh_mirrors/ch/chart-gpt 如果你还在为制作数据图表而烦恼,那么ChartGPT正是你需要的AI图表…...
Windows终极优化神器:WinUtil - 一键解决系统安装、优化、修复的完整指南
Windows终极优化神器:WinUtil - 一键解决系统安装、优化、修复的完整指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否厌…...
面试题详解:Agent 记忆管理全解析——历史对话获取、摘要记忆、事实记忆、知识图谱记忆一次讲透
1. 什么是 Agent 记忆管理?为什么这件事越来越重要?1.1 如果没有记忆,Agent 就只能“活在当下”很多人第一次接触 Agent 时,会觉得记忆似乎就是保存聊天记录。可一旦系统要跨多轮、多天、甚至跨任务持续工作,就会发现单…...
紧急通知:FAO 2024渔业AI伦理新规已生效!NotebookLM合规使用红线清单(含数据脱敏、模型可解释性、渔民知情权三重校验表)
更多请点击: https://intelliparadigm.com 第一章:FAO 2024渔业AI伦理新规核心要义与NotebookLM适配总览 联合国粮农组织(FAO)于2024年3月发布的《人工智能在渔业与水产养殖中的伦理应用指南》,首次将“可追溯性权”“…...
Linux挖矿木马Linux.BtcMine.174技术剖析与防御实战
1. 新型Linux挖矿木马深度剖析:从Linux.BtcMine.174看现代恶意软件的演进最近安全圈里一个来自俄罗斯Dr.Web公司的分析报告引起了我的注意,他们披露了一个代号为Linux.BtcMine.174的新型木马。这玩意儿可不是什么小打小闹的脚本小子作品,而是…...
