GPIO中断
1.EXTI简介
EXTI是External Interrupt的缩写,指外部中断。在嵌入式系统中,外部中断是一种用于处理外部事件的机制。当外部事件发生时(比如按下按钮、传感器信号变化等),外部中断可以立即打断正在执行的程序,转而执行一个特定的中断服务程序(ISR),以响应和处理外部事件。
在大多数嵌入式系统中,外部中断可以配置为上升沿触发、下降沿触发、高电平触发、低电平触发等不同的触发方式,以适应不同的外部事件类型。外部中断通常用于实时性要求较高的应用,如实时控制系统、传感器数据采集等。
在使用外部中断时,需要了解具体的硬件平台和编程语言的相关知识,以确保正确地配置和处理外部中断。
2.EXTI功能框图讲解

首先,中断源从输入线进入,总共有20根中断/事件线,每一条线对应着PXx,例如EXTI0的输入源可以是PX0(X为A、B、C、D、E、F、G、H、I),因为GPIO端口有16个,所以x的取值在0-15,EXTI16的输入源是PVD输出,EXTI17的输入源是RTC闹钟事件,EXTI18的输入源是USB唤醒事件,EXTI19的输入源是以太网唤醒事件(只适用互联型)。
通过外部中断配置寄存器1(AFIO_EXTICR1)配置来选择输入线,每一个EXTIx有四个位,可以选择16个GPIO端口。

选择输入线和输入源后进入边缘检测电路 ,边缘检测电路通过寄存器上升沿触发选择寄存器(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)选择触发方式。
通过配置的触发方式,边缘检测电路输出“1”给到或门,然后另一个输入由软件中断事件寄存器输入,当软件中断事件寄存器相应位为’0’时,写’1’将设置EXTI_PR中相应的挂起位,是否相应中断请求由后面的总开关中断屏蔽寄存器(EXTI_IMR)决定,这样或门输入两个“1”,或门也输出“1”,将这个“1”输入给请求挂起寄存器就是中断,输入给与门就是事件,然后请求挂起寄存器输出“1”给与门,然后中断屏蔽寄存器(EXTI_IMR)对应位置“1”,开放来自线x的中断请求,与门输出“1”给到NVIC中断控制器,NVIC在内核中,由内核响应这个中断,内核就会去查找相应的中断服务函数ESR。
3.GPIO中断实例
3.1.初始化GPIO
通过原理图查看按键对应的GPIO端口

通过原理图可以知道按键SW2连接的是GPIO的PA0,那么我们需要初始化PA0,并且将PA0连接到EXTI0。
初始化GPIO
GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);
3.2.初始化EXTI用于产生中断/事件
初始化EXTI方法和初始化GPIO相似,首先打开系统时钟,然后选择输入线,通过函数GPIO_EXTILineConfig()配置,接着通过EXTI_InitTypeDef结构体定义一个变量,通过这个变量配置EXTI的输入线、模式、触发方式,然后将配置的结构体变量的地址传递给初始化EXTI函数EXTI_Init()。
EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);
3.3.初始化NVIC
初始化NVIC和初始化GPIO和初始化EXTI相似,都需要通过定义结构体变量去配置相应参数。首先定义结构体变量NVIC_InitStructure。然后设置中断优先级级分组,通过函数NVIC_PriorityGroupConfig(),有5个组

没个组有主优先级和次优先级,我们配置中断优先级的时候stm32使用了四个位,当主优先级只是用0位时,取值就是0,次优先级就使用四个位,取值就是0-15。同理,当主优先级只是用1位时,取值就是0-1,次优先级就使用3个位,取值就是0-7,以此类推。然后通过定义的结构体变量配置中断源,抢占优先级,子优先级。注意这里的中断源配置,如果是GPIO0-4都是单独的EXTIx_IRQn,但是如果你说4以后的端口,就会使用到EXTI9_5_IRQn和EXTI15_10_IRQn。然后将配置的结构体变量的地址传递给初始化NVIC初始化函数NVIC_Init()。
NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
3.4.编写中断服务函数
通断服务函数都放在stm32f10x_it.c这个文件里面,中断服务函数的名字已经定义好了,放在startup_stm32f10x_hd.s文件的向量表中。通过if语句判断函数EXTI_GetITStatus()的返回值来判断是否产生中断,如果产生中断EXTI_GetITStatus()返回值位1。通过宏定义LED_G_TOGGLE
#define LED_G_TOGGLE {GPIOB->ODR ^= GPIO_Pin_0;}
通过控制端口输出数据寄存器ODR异或运算控制LED交替,异或运算符与1异或改变,与0异或不变。为了防止一直在中断里面,最后需要清除中断位,通过函数 EXTI_ClearITPendingBit()。
void EXTI0_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line0) != RESET){LED_G_TOGGLE;}EXTI_ClearITPendingBit(EXTI_Line0);
}
3.5.main函数
最后,通过main函数调用前面写的函数
int main(void)
{LED_GPIO_RCC();LED_GPIO_Config();EXIT_Key_Config();while(1){}
}
相关文章:
GPIO中断
1.EXTI简介 EXTI是External Interrupt的缩写,指外部中断。在嵌入式系统中,外部中断是一种用于处理外部事件的机制。当外部事件发生时(比如按下按钮、传感器信号变化等),外部中断可以立即打断正在执行的程序࿰…...
springboot完成一个线上图片存放地址+实现前后端上传图片+回显
1.路径 注意路径 2.代码:(那个imagePath没什么用,懒的删了),注意你的本地文件夹要有图片,才可以在线上地址中打开查看 package com.xxx.common.config;import org.springframework.beans.factory.annotat…...
编程思维与生活琐事的内在关联及其应用价值
随着科技的日益普及和信息化时代的到来,编程作为一种现代技能,其影响已不再局限于专业领域,而是逐步渗透到人们的日常生活之中。探讨编程与生活琐事之间的关系,有助于我们更好地理解如何将技术智慧应用于日常管理,提升…...
OSPF排错
目录 实验拓扑图 实验要求 实验排错 故障一 故障现象 故障分析 故障解决 故障二 故障现象 故障分析 故障解决 故障三 故障现象 故障分析 故障解决 故障四 故障现象 故障分析 故障解决 故障五 故障现象 故障分析 故障解决 故障六 故障现象 故障分析 …...
day07-CSS高级
01-定位 作用:灵活的改变盒子在网页中的位置 实现: 1.定位模式:position 2.边偏移:设置盒子的位置 left right top bottom 相对定位 position: relative 特点: 不脱标,占用自己原来位置 显示模…...
05 MP之ActiveRecord模式+SimpleQuery
1. ActiveRecord ActiveRecord(活动记录,简称AR),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。 其目标是通过围绕一个数据对象, 进行全部的CRUD操作。 1.1 让实体类…...
git diff查看比对两次不同时间点提交的异同
git diff查看比对两次不同时间点提交的异同 用 git diff命令: git diff commit-id-1 commit-id-2 不同commit-id在不同的时间点提交产生,因为也可以认为git diff是比对两个不同时间点的代码异同。 git diff比较不同commit版本的代码文件异同_git diff c…...
基于muduo网络库开发服务器程序和CMake构建项目 笔记
跟着施磊老师做C项目,施磊老师_腾讯课堂 (qq.com) 一、基于muduo网络库开发服务器程序 组合TcpServer对象创建EventLoop事件循环对象的指针明确TcpServer构造函数需要什么参数,输出ChatServer的构造函数在当前服务器类的构造函数当中,注册处理连接的回调函数和处理…...
前端支持下载模板、导入数据、导出数据(excel格式)
前言 xlsx是由SheetJS开发的一个处理excel文件的npm库,适用于前端开发者实现下载模板、导入导出excel文件等需求,演示的项目的技术栈为vue3 elementPlus 一. 引入xlsx 安装xlsx npm install xlsx引入xlsx import * as XLSX from xlsx;二. 下载模板 const han…...
编译Faiss-gpu【InterMKL】C++ 按步骤操作 基本不会有问题的 python原理相同。
编译Faiss-gpu C++ 基本介绍 使用Faiss版本【1.7.4】 该项目依赖于BLAS 组件 OpenBLAS 和 IntelMKL BLAS 【官方支持】 IntelMKL 会比 OpenBLAS 快的多。 【来自官方结论】 本机环境 Cuda :11.1 Cuda-Driver: 515 InterMKL: 2021.2.0 Faiss :1.7.4 注意:faiss仅…...
conn.execute的用法详解
conn.execute的用法详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入研究数据库连接中conn.execute的用法,解析它的功能、…...
GetBuffer() 与 ReleaseBuffer() 使用详解
GetBuffer() 与 ReleaseBuffer() 使用详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入研究在编程中常用的GetBuffer()与ReleaseBuff…...
Flink CEP(基本概念)
Flink CEP 在Flink的学习过程中,我们已经掌握了从基本原理和核心层的DataStream API到底层的处理函数,再到应用层的Table API和SQL的各种手段,可以应对实际应用开发的各种需求。然而,在实际应用中,还有一类更为复…...
[AIGC] Spring Gateway与 nacos 简介
文章目录 Spring Gateway简介主要特性优点总结 Nacos简介主要特性优点总结 Spring Gateway 简介 Spring Gateway是一个基于Spring Framework的工具,用于构建和管理微服务架构中的网关。它提供了一种简单而灵活的方式来路由和过滤请求,以及在微服务之间…...
2024-2-3-复习作业
1> 要求: 效果图: 2> 要求: 效果图: 3> 要求: 效果图: 源代码: #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct Node {datatype data…...
【如何快速上手Vue.js框架——详细介绍】
如何快速上手Vue.js框架——详细介绍 1. 介绍2. 理解Vue.js的核心概念3. 搭建开发环境4. 创建第一个项目5. 学习基础6. 进阶概念7. 最佳实践和模式8. 构建和部署9. 持续学习10. 实际操作 1. 介绍 要快速上手Vue.js框架,可以按照以下步骤进行学习和实践:…...
1Panel应用推荐:青龙定时任务管理平台
1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…...
BUUCTF-Real-[struts2]s2-013
struts2的标签中 <s:a> 和 <s:url> 都有一个 includeParams 属性,可以设置成如下值none - URL中不包含任何参数(默认) get - 仅包含URL中的GET参数 all - 在URL中包含GET和POST参数 当includeParamsall的时候,会将本次…...
【实战知识】使用Github Action + Nginx实现自动化部署
大家好啊,我是独立开发豆小匠。 先说一下背景~ 我的小程序:豆流便签,目前使用云托管部署后端服务,使用轻量级服务器部署数据库和一些中间件。 因此服务器成本:云托管 + 云服务器 云托管每周花费5元,一个月就是50,一年就是500啊,所以这期准备把云托管优化掉! 1. 需…...
web前端--------渐变和过渡
线性渐变,是指颜色沿一条直线进行渐变,例如从上到下、从左到右。 当然,CSS中也支持使用角度来设置渐变的方向,角度单位为deg。 0deg,为12点钟方向,表示从下到上渐变。 90deg,为3点钟方向&…...
LN4056A 1.0A 具有 USB 接口兼容的线性电池管理芯片
■ 产品概述 LN4056A是可以对单节可充电锂电池进行恒流/恒压充电的充电器电路元器件。该器件内部包括功率晶体管,应用时不需要外部的电流检测电阻和阻流二极管。 只需要极少的外围元器件,并且符合 USB 总线技术规范,非常适合于便携式应用的领…...
PyTorch 3.0静态图分布式训练架构图(工业界最后的黑箱):TensorRT-LLM兼容层、动态Shard切分算法与冷热参数分离加载协议全披露
第一章:PyTorch 3.0静态图分布式训练架构全景概览PyTorch 3.0 引入了原生静态图(Static Graph)支持,通过 TorchDynamo Inductor 的全新编译栈实现图捕获与优化,为大规模分布式训练提供低开销、高确定性的执行基础。该…...
保姆级教程:用Python解析大疆无人机照片EXIF,实现正射影像像素坐标定位
大疆无人机正射影像像素级地理定位实战指南 从航拍到测绘:解锁影像元数据的空间密码 当大疆无人机的快门按下瞬间,传感器记录的远不止是可见光信息。每一张正射影像都像被精心封装的时间胶囊,内部藏着完整的空间坐标、飞行姿态和相机参数。这…...
避免自激!AD8367用作AGC放大器时的PCB布局避坑指南与环路稳定性分析
避免自激!AD8367用作AGC放大器时的PCB布局避坑指南与环路稳定性分析 在射频与中频电路设计中,AD8367作为一款高性能可变增益放大器(VGA),因其宽增益范围(45dB)和集成平方律检波器特性,常被用于自动增益控制(AGC)系统。然而&#x…...
别再死记硬背U-Net结构了!用PyTorch手撸一个,从代码反推设计思想
从零实现U-Net:用PyTorch代码拆解医学图像分割的核心设计 在医学影像分析领域,U-Net以其独特的对称结构和跳跃连接机制,成为细胞分割、肿瘤检测等任务的黄金标准。但很多开发者即便看过网络结构图,在实际编码时仍会困惑࿱…...
Listen1音乐聚合工具:打破平台壁垒的无缝听歌解决方案
Listen1音乐聚合工具:打破平台壁垒的无缝听歌解决方案 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_extension 你…...
2024年秋-华中科技大学-HUST-CSE-CTF实战入门:从Misc到PWN的解题思路与技巧精讲
1. CTF入门:从零开始的解题思维构建 第一次接触CTF比赛时,我完全被各种术语和题型搞懵了。Misc、PWN、Web、Reverse...这些名词就像天书一样。但经过几个月的实战,我发现CTF其实就像解谜游戏,关键在于建立正确的解题思维。 对于华…...
C语言编译器工具集终极指南:从GCC、Clang到现代编译技术
C语言编译器工具集终极指南:从GCC、Clang到现代编译技术 【免费下载链接】awesome-c A curated list of awesome C frameworks, libraries, resources and other shiny things. Inspired by all the other awesome-... projects out there. 项目地址: https://git…...
肿瘤研究者的monocle3实战:追踪癌细胞转移路径的5个关键分析步骤
肿瘤研究者的monocle3实战:追踪癌细胞转移路径的5个关键分析步骤 乳腺癌转移机制的研究一直是肿瘤学领域的难点。单细胞RNA测序技术让我们有机会在单个细胞分辨率下观察肿瘤微环境的异质性,而monocle3作为当前最先进的轨迹推断工具,能够帮助研…...
告别复杂配置!CogVideoX-2b一键部署,小白也能当AI视频导演
告别复杂配置!CogVideoX-2b一键部署,小白也能当AI视频导演 1. 开箱即用的视频创作革命 想象一下,你只需要输入一段文字描述,就能自动生成一段高质量的视频内容。这不再是科幻电影中的场景,而是CogVideoX-2b CSDN专用…...
