GPIO输出模式输入模式详细分析(一)

代码星辉·七月创作之星挑战赛 10w+人浏览 306人参与



一、初识GPIO

1.1 GPIO输出速度

一般我们使用GPIO都是使用输入模式或者是输出模式,所为输入模式就是起到检测作用,例如我们将GPIO连接按键,那么通过高电平有效或者低电平有效判断按键按下有效。或者我们使用输出模式将该GPIO口连接LED灯,通过高低电平点亮对应的LED灯,亦或者是AD口等等。

其中GPIO有一个最关键的地方就是最大输出速度,也就是GPIO口高低电平翻转的最快频率。

如下图所示:

在这里插入图片描述

在这里插入图片描述

知道翻转速度有什么用?

可以在某种情况下通过配置GPIO的速度来改善一些控制情况。

图中同红色标注的,这里就是一个电平翻转,从低电平到到高电平,然后在到低电平,这是一个周期。需要注意的是频率就是单位时间内高低电平翻转的次数,我们需要求的是一次翻转电平的时间,因此需要f的倒数,在10MHZ频率下,我们可以算出,高低电平翻转一次需要的时间是100ns,但是不是绝对的,

理想状态下高电平直接就变成低电平,但是从图中就可以看出,并不是如此。
就是在日常生活中肯定是有一个变化趋势的,也就说,在课本上我们学到的高电平直接到低电平是不可能的实现的,因为没有这种元器件支持。

GPIO在电平变化过程中有一个上升时间和下降时间。并且这个数值是有要求的。两个时间只差小于(2/3)T,频率越高,这是时间就要求的约苛刻。这应该也是芯片的一个技术难点
10MHZ 100ns 单个的上升时间或者下降时间需要小于38ns
50MHZ 20ns 单个的上升时间或者下降时间需要小于6ns

1.2 分析上升时间和下降时间

既然存在上升时间和减少时间,并且不同频率下这个速度不一样,那么就说明这个时间是通过技术可以降低的,这就涉及到电子器件的工艺,我们仅在这里做理论分析。

在这里插入图片描述

高低电平的变化,也就是电压变化的快慢,也就是电容的充放电的速度很快,而我们经常说的0和1指得就是电容的充放电过程,只不过是将充电和放电后的状态用数字进行具象化表达。是不是这样的,好像确实是这样的。

此时看公式就可以看出来,就是这样意思,电压变化的越快,那么电流就很大,对用的功耗就很高。也进一步证实了这个样子,(当然电路中的所有电容不都是这个效果,但是可以通过这个方式去理解电容充充放电过程,还有就是一个芯片内部有很多电容,也就是通过这个进行存储的吧。对于电容可以先进行简单的理解。)

1.3 单片机内部干扰或者电路中干扰的理解

根据电容公式,电压变化越快,电流越大。在单片机内部就是频率理解:频率越高,也会出现电磁干扰的现象,也就是电生磁,磁生电??

电压变化率(dv/dt​)越大,电流(I)越大。在单片机内部,高频信号(如时钟信号)的快速切换会导致电压急剧变化,从而产生较大的瞬态电流。

高频电路​:
高频信号(如MHz级别的时钟)的快速边沿(上升/下降时间短)会导致电流尖峰,这些瞬态电流通过导线和寄生电感时,会引发电压波动(V=L⋅di/dt​),进一步加剧噪声。

关于电生磁(传导干扰):
高频电流在导线中流动时,周围会产生交变磁场(安培定律)。若磁场耦合到邻近电路(如信号线或电源线),会感应出干扰电压,形成传导干扰​。

关于磁生电(辐射干扰)​​
交变磁场在空间中传播,形成电磁波(麦克斯韦方程组)。若其他电路或设备接收到这些电磁波,会感应出噪声电流,即辐射干扰​。

谐波与串扰​:
高频信号的谐波成分(如时钟信号的奇次谐波)可能通过电源线或PCB走线耦合到其他电路,导致串扰或共模干扰。

晶振干扰:
无源晶振的反馈环路易受电磁干扰,导致频率漂移(如对讲机靠近时漂移±100ppm),进而引发单片机程序跑飞。

​PWM调光干扰:
LED驱动电路的高频PWM信号若未良好滤波,会通过电源线传导至其他电路,导致ADC采样错误。

以上这些内容知道了解就行,有个印象。

在这里插入图片描述

配置GPIO得时候频率的大小根据需求进行配置,够用就行。没必要浪费,因为功耗会很大。
这个地方不仅有电容的影响,还会有电压的影响。

主要产生干扰的其实是高频的对低频的干扰

二、GPIO的模式分析

每个 GPIO 引脚可以由软件配置为输出(推挽或开漏)、输入、外设备用功能或者模拟模式。

每个 GPIO 引脚都可以配置为上拉、下拉或浮空。除模拟模式外,所有的 GPIO 引脚都具备大电流驱动能力。

GPIO有三种状态:高电平,低电平,浮空/高阻态。

2.1 输出模式

在这里插入图片描述

在这里插入图片描述

根据上图可以看出有一个片上外设,这个片上外设值得就是ADC、通信串口Uart等,可以想想一下我需要AD检测,不管是输入芯片的是电流还是电压都是需要引脚作为支撑,那么这个引脚不就是我们常指的GPIO口,如果是作为检测使用,那么我们不就需要将GPIO配置为输入,然后另外一端链接的是AD检测模块,有对应的电路,这也是为什么有些GPIO可以作为AD检测有些不可以作为检测口,正是这个原因。并且有些可以作为Uart有些不能作为UArt口道理都是一样的,甚至DMA也是如此。之前一直不理解为什么,今天有点通透了。
还有一个就是片上外设值得是芯片上面的集成的外设,需要对应电路作为配合。还有一个外设是芯片驱动的,我们称之为负载。注意别把片上外设理解成我们的负载。

言归正传:

输出模式下一般分为推挽输出和开漏输出。

2.1.1 推挽输出(push-pull)

推挽输出(Push-Pull Output)由两个互补的晶体管(上管P-MOS、下管N-MOS)组成。通过输出驱动器控制P-MOS和N-MOS开关来输出高低电平的。 可以理解为对电流进行推拉操作 。

  • 输出高电平​:上管导通,下管截止,电流从电源经上管流向负载(“推”模式)。

  • 输出低电平​:上管截止,下管导通,电流从负载经下管流向地(“挽”模式)

“强推挽”是推挽输出的增强版本,主要差异在驱动能力和导通电阻​:

  • 驱动电流更大​:

    • 普通推挽输出驱动电流一般为数mA至25mA(如STM32的IO口最大25mA)。

    • 强推挽通过优化晶体管尺寸或降低导通电阻,可提供更高的电流(例如50mA以上),适合驱动重负载(如电机、大功率LED)。

  • 导通电阻更低​:

    • 强推挽的MOS管导通电阻(Rds(on)​)更小,输出电平更稳定(压降更小),尤其在驱动低阻负载时不易出现电平跌落。
  • 功耗与散热​:

    • 强推挽因驱动电流大,静态功耗可能更高,且大电流下需注意散热设计。

晶体管导通电阻(Rds(on)​)GPIO的驱动电流能力主要由内部MOS管的导通电阻决定。导通电阻越小,驱动能力越强(如STM32推挽模式下可达±25mA)。

GPIO的电压受到导通电阻影响。

在这里插入图片描述

GPIO(通用输入输出口)的输出模式最大电压主要由其供电电压(VDD)决定:

  • 标准情况​:STM32系列GPIO在3.3V供电时,输出高电平的典型值为3.3V,低电平为0V。

  • 负载影响​:无负载时可达理论最大值,但驱动较大电流时,因内部电阻可能导致电压略微下降(如降至3.0V左右)。

  • 5V容忍引脚​:部分引脚标有“FT”(Five Tolerate),可输入5V电平,但输出仍限制在3.3V​(供电电压决定)。

  • 开漏模式​: 若外接5V上拉电阻,开漏输出可间接实现5V高电平​(内部MOS管断开时由外部电源拉高)

该模式下具有驱动能力,可以通过单片机内部电压驱动外设。

应用场景:高速切换和高负载能力的场合,如驱动LED指示灯、继电器。

  • 轻负载​(如驱动LED+限流电阻):电流小,电压稳定。

  • 重负载​(如直接驱动电机):电流超限导致电压显著跌落,甚至触发过流保护。

(1)推出去:上端的MOS管打开,下端的MOS管关闭,GPIO输出高电平,电流走向如图

![[Pasted image 20250607222228.png]]

输出的电压是有限的,一般都是VDD,可能是3.3V或者是5V。

在开发过程中是直接驱动控制LED的三极管。

(2)挽回来:上端的MOS管关闭,下端的MOS管打开,GPIO输出低电平,给外部的MOS管栅极放电

![[Pasted image 20250607222300.png]]

这个地方要牢记脑海中,这是基本内容

2.2.2 开漏输出

只有N-MOS工作P-MOS一直处于断开状态。通过控制N-MOS的开合来控制电路。

该模式下无驱动能力,需要外部电压驱动外设。

应用场景:需要外部上拉电阻定义高电平的场合,如I2C通信。

在这里插入图片描述

如果下面的N-MOS管导通,那么该GPIO输出的就是低电平。但是有一个问题N-MOS管导通的电压谁来提供? 只能说是视情况而定

如下图所示,如果使用GPIO去做外部芯片的使能脚(GPIO的上拉电平是5V),假设外部芯片的使能脚的电压只能承受3.3V以内。使用推挽模式进行控制,那么Q1打开,Q2关闭,外部使能脚要承受5V电压,就不可行。因此只能使用开漏输出

在这里插入图片描述

如果使用开漏模式去输出,外部接个3.3V的上拉电阻,就可以实现,这是因为如果不接上拉电阻可能导致电流过大烧毁器件。

  1. 当Q2打开时,EN被拉到低电平。这是因为输出引脚是直接和地相连接的,那么直接就是0V。

  2. 当Q2关闭时,Q2的漏极是浮空的状态,即高阻态(无限大的电阻),则EN被拉到3.3V

在这里插入图片描述

现代芯片(尤其是CMOS工艺)的输入端本质上是MOSFET的栅极。栅极与沟道之间通过二氧化硅(SiO₂)绝缘层隔离,形成天然的高阻态。直流条件下,栅极电流仅为极微弱的漏电流(皮安级至纳安级),等效阻抗可达 ​10⁹~10¹² Ω(1GΩ~1TΩ)​​。

MOSFET是电压控制器件,其导通仅需栅极电压变化,几乎不消耗电流。这与电流控制器件(如BJT)形成鲜明对比,后者需持续基极电流。

电压是MOSFET导通的唯一钥匙,其核心机制依赖于栅极绝缘层的电场效应。导通过程本质是栅极电压在绝缘层中建立电场,进而调制沟道载流子分布

开漏模式的本质​:

开漏输出只能主动拉低(Q2导通时),无法主动推高。高电平依赖外部上拉(R1)。

开漏输出模式(Open-Drain)的GPIO引脚未连接外部上拉电阻时,EN引脚的电压会变得不确定(浮空状态)

  • EN引脚内部是MOSFET栅极,通过绝缘层(SiO₂)与芯片内部隔离 → ​栅极电荷无法通过电流泄放

  • 若此前操作残留电荷(如Q2导通时积累的电子),或环境电磁干扰耦合电荷,将长期滞留于栅极电容上。

高阻态(High-Z)是器件的工作状态,而浮空(Floating)是高阻态下电压不确定的实际表现

  • 高阻态​:描述的是输出端电气特性​(断开连接,阻抗极高)。

  • 浮空状态​:描述的是该特性下实际电平结果​(电压随机,系统不可控)。

特性高阻态浮空状态
本质器件主动断开输出(阻抗 >1MΩ)高阻态引发的电压不确定性
图中对应位置Q2关闭时的“输出”端R1缺失时的EN引脚
电压表现依赖外部电路0.3V~2.8V随机抖动
解决方式外接上拉/下拉电阻必须通过电阻锚定电位
特性浮空 (Floating)​​高阻态 (High-Z)​​
定义物理引脚未连接任何电路​(悬空)
​芯片内部三态门输出断开​(逻辑上等效开路)
产生原因外部电路未连接,引脚裸露。内部上拉/下拉MOS管均关闭,输出电阻极大(>100MΩ)
电平状态不确定,易受电磁干扰影响
不确定,由外部电路决定(如总线电平)
设计意图非主动设计,通常为硬件设计缺陷。​主动配置,用于总线仲裁、模拟输入等场景

被控芯片输入端阻抗极高​(典型值1MΩ~10GΩ):

  • EN引脚内部是CMOS门电路MOSFET栅极,输入电流几乎为0(理论漏电流<1μA)。

  • 计算示例​:若R1=10kΩ,输入电流=1μA,压降= 1μA × 10kΩ = 0.01V。

  • 结果​:EN电压 ≈ 3.3V - 0.01V = ​2.99V​(仍被识别为高电平)。

所有高阻态输出引脚(如开漏模式)必须通过电阻连接至确定电位!

开漏模式可支持几个GPIO同时控制一个输入:

使用推挽输出,会烧毁

在这里插入图片描述
使用开漏输出

在这里插入图片描述

开漏模式扩展高电平的原理

  • 开漏输出的特性​:

    开漏模式下,GPIO只能主动输出低电平(内部MOSFET导通拉低),而高电平需依赖外部上拉电阻连接到更高电压的电源(如12V)。当内部MOSFET关闭时,输出电平由外部电源决定。

  • 电平转换示例​:

    • 若STM32的GPIO(3.3V逻辑)需控制12V设备,可将开漏引脚外接上拉电阻至12V电源。
    • 输出低电平时,内部MOSFET导通,引脚接地(0V);输出高电平时,MOSFET关闭,引脚被上拉至12V。
  • 上拉电阻选择​:

    • 阻值需平衡速度功耗。例如,12V系统常用4.7kΩ~10kΩ电阻,确保电流在安全范围内(如1-2mA)。
    • 公式:R=ILED​Vext​−VLED​​(驱动LED时需计算限流电阻)。
  • 保护电路​:

    • 若驱动感性负载(如继电器),需添加续流二极管防止反向电压击穿GPIO。
    • 确保外部电源电压不超过GPIO引脚的最大耐受电压(如5V容忍引脚需避免直接输入12V)

通过开漏模式+外部上拉,GPIO可安全扩展至12V甚至更高电平,但需注意电阻选型、保护电路和速度权衡。对于复杂系统,推荐使用专用电平转换器或驱动芯片以提高可靠性。

  • 开漏输出的局限性​:

    GPIO开漏模式仅能主动拉低电平(0V),高电平需依赖外部上拉电源。但MCU的GPIO引脚耐压通常不超过5V(如STM32为3.3V),直接连接220V会损坏芯片。

  • 高压隔离方案​:

    需通过继电器光耦固态继电器(SSR)​实现电气隔离,例如:

    • 继电器控制​:

      GPIO开漏输出驱动继电器线圈(5V或12V),继电器触点控制220V通断。

    • 光耦隔离​:

      光耦(如PC817)的输入端由GPIO控制,输出端通过三极管或MOSFET驱动220V负载。

    • 固态继电器(SSR)​​:

      直接通过GPIO的低压信号(3.3V/5V)控制SSR内部的光电隔离电路,进而切换220V负载。

  • 智能家居控制​:
    通过STM32的GPIO开漏输出控制继电器,实现220V灯具或电器的开关。

  • 工业设备​:
    使用光耦隔离+可控硅(如BT136)驱动220V电机,GPIO仅提供低压控制信号。



专栏介绍

嵌入式通信协议解析专栏
PID算法专栏
C语言指针专栏
单片机嵌入式软件相关知识
FreeRTOS源码理解专栏



文章源码获取方式:
如果您对本文的源码感兴趣,欢迎在评论区留下您的邮箱地址。我会在空闲时间整理相关代码,并通过邮件发送给您。由于个人时间有限,发送可能会有一定延迟,请您耐心等待。同时,建议您在评论时注明具体的需求或问题,以便我更好地为您提供针对性的帮助。

【版权声明】
本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议。这意味着您可以自由地共享(复制、分发)和改编(修改、转换)本文内容,但必须遵守以下条件:
署名:您必须注明原作者(即本文博主)的姓名,并提供指向原文的链接。
相同方式共享:如果您基于本文创作了新的内容,必须使用相同的 CC 4.0 BY-SA 协议进行发布。

感谢您的理解与支持!如果您有任何疑问或需要进一步协助,请随时在评论区留言。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慈悲不渡自绝人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值