当前位置: 首页 > news >正文

【STM32】GPIO口以及EXTI外部中断

在这里插入图片描述
个人主页~
有关结构体的知识在这~
有关枚举的知识在这~


GPIO口以及EXTI外部中断

  • GPIO
    • 一、简介
    • 二、基本结构
    • 三、输入输出模式
      • 1、输入模式
        • (1)上拉输入
        • (2)下拉输入
        • (3)浮空输入
        • (4)模拟输入
      • 2、输出模式
        • (1)推挽输出
        • (2)开漏输出
        • (3)复用推挽输出
        • (4)复用开漏输出
  • EXIT外部中断
    • 一、中断系统
    • 二、STM32中断
      • 1、NVIC的基本结构
      • 2、NVIC优先级分组
    • 三、EXTI简介
    • 四、EXTI实现

GPIO

一、简介

可配置为4种输入模式、4种输出模式

引脚电平0~3.3V,部分可以容忍5V

输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等

输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

二、基本结构

在这里插入图片描述
每一个GPIO口都由寄存器和驱动器组成,寄存器的每一位对应一个引脚,内核可以通过APB2总线对寄存器进行读写,输出(输入)寄存器写1引脚输出(输入)高电平,输出(输入)寄存器写0引脚输出(输入)低电平,因为STM32是32位的单片机,而引脚只有16个,所以寄存器只有低16位有对应的端口,驱动器用来增大驱动能力,寄存器只存储数据
在这里插入图片描述

三、输入输出模式

一个端口只能有一个输出,但可以有多个输入,所以在输入时,输出驱动器是关闭的,在输出时,输入驱动器是开启的
在这里插入图片描述
当最右边I/O引脚输入高于VDD电压时,上方保护二极管被导通,电流进入不到电路中
当最右边I/O引脚输入低于VSS电压时,下方保护二极管被导通,电流进入不到电路中
所以可输入的电流范围在VSS~VDD

不管是输入输出模式,都会涉及到数字数据与模拟数据的转换,输入部分是通过触发器和输入数据寄存器,输出部分是通过MOS管和输出控制

1、输入模式

在这里插入图片描述
上半部分是输入电路

(1)上拉输入

上拉输入和下拉输入都是通过stm32控制的,可以自己决定上拉、下拉、浮空,并且上拉电阻和下拉电阻的阻值都很大,所以对电路的影响不是很大

上拉输入就是输入驱动器上方开关接通,此时内部连接上拉电阻,是一种默认为高电平的输入方式

在引脚输入高电平时,输入高电平,引脚输入低电平时,输入低电平:
在这里插入图片描述

引脚浮空(没有输入)时,输入高电平:
在这里插入图片描述
然后通过触发器,这里的触发器作用是给信号整形,因为在输入的过程中信号可能会失真,
触发器的作用:当数据高于上阈值时输出高电平,低于下阈值时输出低电平,在中间晃悠的不变化
在这里插入图片描述
然后这个数据就写入输入数据寄存器,由程序读取寄存器某一位的数据就可以知道端口的输入电平了

然后是复用功能输入这根线连接到其他需要读取端口状态的外设上,接收数字量

(2)下拉输入

下拉输入就是输入驱动器下方开关接通,此时内部连接下拉电阻,是一种默认为低电平的输入方式

在引脚输入高电平时,输入高电平,引脚输入低电平时,输入低电平:
在这里插入图片描述

在引脚浮空时,输入低电平:
在这里插入图片描述

(3)浮空输入

当上拉电阻和下拉电阻同时断开时,此时引脚处于浮空输入状态,此时输入高电平为高电平,输入低电平为低电平

当引脚处于浮空状态时,输入不确定,任意稍微的影响都有可能导致输入发生变化

小总结:不管是上拉输输入、下拉输入还是浮空输入,优先保证I/O口的输入如果为高电平(低电平),那么输入一定是高电平(低电平),变化只是在引脚处为浮空输入时有变化,我们一般使用浮空输入(多数情况下)和上拉输入(在有外界干扰的情况下),很少使用下拉输入

当使用浮空输入时最好使用一个连续的驱动,防止输入浮空

(4)模拟输入

在这里插入图片描述

接收模拟量,接到触发器前边,直接接收真实信号

2、输出模式

在这里插入图片描述
下半部分是输出电路

数字数据由输出数据寄存器或外设控制,输出数据寄存器控制输出直接接普通I/O口,外设控制输出则需要使用AFIO口,也就是复用功能IO口

输出数据寄存器还接一个位设置/清除寄存器,用来随时更改输出数据寄存器的某一位上的值
通过将位设置寄存器某一位改为1(不需置输出数据寄存器某一位为1的都为0),那么对应的那一位的输出数据寄存器的值就设置为1
通过将位清除寄存器的某一位改为1(不需置输出数据寄存器某一位为0的都为0),那么对应的那一位的输出数据寄存器的值就设置为0

(1)推挽输出

在推挽输出模式下,P-MOS管、N-MOS管均可以使用
MOS管就相当于一个开关,只是这个开关可以用来转换信号
数据寄存器为1时,上管导通,下管断开,引脚直接接VDD,输出高电平
数据寄存器为0时,上管断开,下管导通,引脚直接接VSS,输出低电平

在推挽输出模式下STM32对I/O口有绝对的控制权,高低电平的输出都是由STM32决定的

(2)开漏输出

在开漏输出模式下,P-MOS管不可用,N-MOS管可用
数据寄存器为1时,下管断开,此时引脚处为高阻态(无驱动能力)
数据寄存器为0时,下管导通,引脚接VSS,输出低电平(有驱动能力)

在引脚外接一个上拉电阻到5V的电源,当输出低电平时N-MOS接VSS,输出高电平时,上拉电阻将电压拉高至5V

(3)复用推挽输出

同推挽输出,不过是由外设控制的,不是数据寄存器控制的

(4)复用开漏输出

同开漏输出,不过是由外设控制的,不是数据寄存器控制的

EXIT外部中断

一、中断系统

在主程序运行过程中,出现了特定的中断触发条件,也叫中断源,使得CPU暂停当前正在运行的程序,去处理中断程序,处理完成后再返回原来的位置继续执行主程序

当有多个中断源同时申请中断时,CPU会先相应优先级更高的中断源,优先级是可以自己设置的

当一个中断程序正在运行时,又有新的优先级更高的中断源申请中断,CPU暂停当前中断程序,去处理该优先级更高的中断程序,处理完后返回该中断程序

二、STM32中断

STM32使用NVIC统一管理中断,每个中断通道有16个可编程的优先级,优先级可再分为抢占优先级和响应优先级

1、NVIC的基本结构

在第一篇的博文里提到过外设表,外设表中的前两个是内核外设,NVIC就是一个内核外设,是用来管理中断的

在这里插入图片描述

每个中断都可以直接连接到NVIC上,NVIC通过分配优先级确定每个中断的先后顺序,它同一时间只会上交一个中断给CPU,让CPU处理中断

2、NVIC优先级分组

NVIC的中断优先级由优先级寄存器的4位决定,这4位可以分为高n位的抢占优先级和低4-n位的相应优先级,当抢占优先级和响应优先级均相同时按照中断号排队

抢占优先级和响应优先级分为五组

组别(位数以及取值范围)抢占优先级相应优先级
00位,04位,0~15
11位,0~13位,0~7
22位,0~32位,0~3
33位,0~71位,0~1
44位,0~150位,0

三、EXTI简介

EXTI可以监测指定GPIO的电平信号,当电平变化时,EXTI向NVIC发出中断申请

支持上升沿、下降沿、双边沿、软件触发
上升沿:电平由低电平变为高电平的瞬间触发中断
下降沿:电平由高电平变为低电平的瞬间触发中断
双边沿:上升沿和下降沿都可以触发中断
软件触发:程序代码执行触发中断

任意GPIO口都可以当做外部中断的引脚,但GPIO后边跟的数字相同不能触发中断,这个数字叫做pin,也就是说PA0和PB0不能同时做中断引脚,如果需要多个中断引脚的话pin值不能相同,原因是GPIO连接到AFIO上,起到中断引脚选择的作用,AFIO从pin值相同的通道里选择一个接到EXTI边沿检测及控制电路上,一共选择16个,也就是PA0、PB0、PC0只能有一个接到EXTI边沿检测及控制电路上,再加上PVD、RTC、USB、ETH四个特殊外设一共20个输入信号,经过EXTI分为两种输出:NVIC触发中断,其他外设触发事件响应

这里5 ~ 9、10 ~ 15整合到一条通道上了,一条通道上的触发同一个中断函数,在中断函数里还需要标志位才能区分到底是哪一个中断进来的
在这里插入图片描述

如果发生EXTI外部中断,可以发生中断响应或者事件响应,中断响应就是执行中断程序,事件响应就是操作外设而不触发中断

四、EXTI实现

在这里插入图片描述

上方是总线和外设接口,输入先遇到边沿检测电路,当上升沿时上升沿触发选择寄存器为1,下降沿时下降沿触发选择寄存器为1,它们两个只要有一个为1,边沿检测电路就可以为通路

之后遇到的这个元器件叫做或门,执行逻辑或的操作,当软件中断事件寄存器和边沿检测电路传来的数据中有一个为1则为1,全为0则为0

然后线路分为两路,左路对应的是事件响应,上路对应的是中断响应

左路连接的元器件叫做与门,执行逻辑与的操作,如果事件屏蔽寄存器和全为1则为1,有一个为0则为0,然后连接到脉冲发生器,脉冲发生器起到将数字信号转变为模拟信号的作用

上路连接请求挂起寄存器,可以通过读取该寄存器知道是哪个通道触发的中断,如果该寄存器置1,就继续往左走,与中断屏蔽寄存器连接到一个与门上,最后连接到中断控制器NVIC执行中断程序


今日分享就到这里了~

在这里插入图片描述

相关文章:

【STM32】GPIO口以及EXTI外部中断

个人主页~ 有关结构体的知识在这~ 有关枚举的知识在这~ GPIO口以及EXTI外部中断 GPIO一、简介二、基本结构三、输入输出模式1、输入模式(1)上拉输入(2)下拉输入(3)浮空输入(4)模拟输…...

Confluent Cloud Kafka 可观测性最佳实践

Confluent Cloud 介绍 Confluent Cloud 是一个完全托管的 Apache Kafka 服务,提供高可用性和可扩展性,旨在简化数据流处理和实时数据集成。用户可以轻松创建和管理 Kafka 集群,而无需担心基础设施的维护和管理。Confluent Cloud 支持多种数据…...

【LeetCode每日一题】——415.字符串相加

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 415.字符串相加 四【题目描述】 给定两个字符…...

linux---使用定时任务同步时间

首先,确保你的系统上安装了ntpdate工具,它用于从NTP服务器获取并设置系统时间。如果你的系统上没有安装,你可以通过包管理器进行安装 安装ntpdate yum install -y ntpdate设置定时任务 crontab -e在文件中添加下面内容 #每5分钟同步一次时间 …...

Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit

可以搭建属于公司内部或者个人的Git服务器,方便程序代码及文档版本管理。 官网:http://www.gitblit.com/ Windows环境下安装 提前已经安装好了JDK。 官网下载Windows版的GitBlit。 将zip包解压到自己想要放置的文件夹下。 建立版本库路径&#xff0c…...

KNN分类算法 HNUST【数据分析技术】(2025)

1.理论知识 KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想: 对于任意n维输入向量,分别对应于特征…...

AI Agent开源框架汇总(持续更新)

文章目录 AI Agent开源框架汇总什么是AI Agent为什么需要智能体(Agent)Web3 AI Agent使用场景框架分类低代码(No-Code/Low-Code)框架基础框架代码框架Multi-Agent 框架 / 架构热门开源框架PhidataRigai16z的AI Agent框架ElizaLangChain和phidata对比OpenAI SwarmAI Agent开…...

录播检测原理是什么?

直播间录播的检测可以通过多种方式进行。以下是一些常见的检测方法: 1、水印识别:直播平台可以在实时直播画面中嵌入特定的水印,通过识别水印来判断是否存在录播行为。 2、特征分析:直播平台可以通过对直播画面进行特征分析,检测…...

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…...

MySQL索引为什么是B+树

MySQL索引为什么是B树 索引是帮助MySQL高效获取数据的数据结构,在数据之外,数据库还维护着满足特定查找算法的数据结构B树,这些数据结果以某种特定的方式引用数据,这样就可以在这些数据结构上实现高级查找算法,提升数据…...

ffmpeg之播放一个yuv视频

播放YUV视频的步骤 初始化SDL库: 目的:确保SDL库正确初始化,以便可以使用其窗口、渲染和事件处理功能。操作:调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 创建窗口用于显示YUV视频: 目的:…...

《2023-2024网络安全产业发展核心洞察与趋势预测》

2023年至2024年间,我国经济总体上逐步显现出复苏迹象,并开始释放向上增长的潜力。在此背景下,网络安全产业也经历了经济环境的深刻影响,不仅实现了阶段性的稳定发展,也展现出较强的韧性与适应能力,为未来的…...

为什么环境影响评价导则中生态环境评价中的【植被类型图】制作比较难?制作流程是什么

最新《环境影响评价技术导则生态影响HJ19—2022》于2022年1月15日发布,2022-07-01正式实施,新导则颁布后,要求生态现状评价内容中基本图件构成包含:项目区域地理位置图、工程平面图、调查样方、样线、点位、断面等布设图、土地利用…...

肿瘤电场治疗费用

肿瘤电场治疗作为一种前沿的肿瘤治疗方法,近年来备受关注。该方法通过利用特定频率的交流电场,作用于恶性肿瘤细胞,以达到抑制肿瘤生长的目的。然而,随着这种治疗方法的普及,其费用问题也逐渐成为患者和家属关注的焦点…...

替换 Docker.io 的 Harbor 安全部署指南:域名与 IP 双支持的镜像管理解决方案

经过验证 替换 Docker.io 的方式失败了, 以下的过程中还是需要设置 registry-mirrors 才行 以下是一篇详细教程,展示如何基于 openssl.conf 配置生成域名为 registry-1.docker.io 和 IP 地址为 172.16.20.20 的证书,构建 Harbor 服务。 环境准备 系统环境…...

Python知识图谱框架

Python中用于构建知识图谱的框架和库有很多,它们各自有不同的特点和功能,适用于不同的应用场景。以下是一些常用的框架: 1. NetworkX 功能:NetworkX是一个用于创建、操作和研究复杂网络的Python库。它可以用于构建知识图谱&…...

elasticsearch 杂记

8.17快速安装与使用 系统:ubuntu 24 下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-linux-x86_64.tar.gz 解压后进入目录:cd ./elasticsearch-8.17.0 运行:./bin/elasticsearch 创…...

Text2Reward学习笔记

1. 环境配置 1.1 安装 PyTorch-1.13.1 pip install torch1.13.1cu116 torchvision0.14.1cu116 \ torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu1161.2 安装工具库 pip install stable-baselines31.8.0 wandb tensorboard \ -i https://pypi.tuna…...

KylinOS V10 SP3下编译openGauss与dolphin插件

编译环境 KylinOS v10 sp3gcc 7.3.0make 4.3opengauss 5.0.0 mkdir -p /data/opengauss cd /data/opengauss git clone https://gitee.com/opengauss/openGauss-server.git git clone https://gitee.com/opengauss/Plugin.git wget -c https://opengauss.obs.cn-south-1.myhu…...

NPM老是无法install,timeout?npm install失败

NPM老是无法install,timeout? 尝试一下如下操作 一、 更换国内源 npm config set registry https://registry.npmmirror.com npm install或指定源install npm install pkg --registry https://registry.npmmirror.com --legacy-peer-deps如下图 二…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...