GPIO定义
GPIO
是General Purpose Input/Output
(通用输入/输出)的缩写,它是一种在计算机系统中用于与外部设备进行数字信号交互的通用接口。
每个 GPIO 引脚可以被配置为输入或输出,并且可以通过编程来读取或写入数字信号。
输入
数字输入
通过
TTL
肖特基触发器将模拟信号转换为数字信号
- 上拉输入(
Pull-Up Input
):输入引脚连接一个上拉电阻,使其保持高电平状态。当没有外部信号输入时,输入引脚会被上拉电阻拉高。 - 下拉输入(
Pull-Down Input
):输入引脚连接一个下拉电阻,使其保持低电平状态。当没有外部信号输入时,输入引脚会被下拉电阻拉低。
特性 | 浮空(Floating) | 上拉(Pull-up) | 下拉(Pull-down) |
---|---|---|---|
定义 | 没有明确连接到电源或地, | 输入端通过一个电阻连接到正电源(Vcc)。 | 输入端通过一个电阻连接到地(Gnd)。 |
电平状态 | 取决于外部电路或干扰 | 默认高电平 | 默认低电平 |
信号连接 | 可以接收外部电路的任何电平信号 | 信号连接到地时,输入端为低电平 | 信号连接到电源时,输入端为高电平 |
应用场景 | 用于检测外部信号 传感器输入 通信接口(如RS-232) | 按钮或开关输入 串行通信接口(如I2C) 键盘矩阵 | 按钮或开关输入 某些类型的传感器 低电平触发的电路 |
优点 | 简单,不需要额外的电阻 可以接收外部电路的任何电平信号 | 提供默认的高电平状态 简单实现通信接口的启动条件 | 提供默认的低电平状态 适合低电平触发的设备 |
缺点 | 容易受到干扰 可能不稳定 需要外部电路来确定电平状态 | 需要外部电阻 电流消耗(虽然很小) 可能受到电源波动的影响 | 需要外部电阻 电流消耗(虽然很小) 可能受到地线噪声的影响 |
模拟输入
普通输出
- 推挽输出(
Push-Pull Output
):输出引脚能够提供电流流入或流出。在高电平状态下,输出引脚能够输出高电平信号,而在低电平状态下,输出引脚能够输出低电平信号。 - 开漏输出(
Open-Drain Output
):输出引脚可以将其连接到地(实现低电平状态)或保持开路(实现高电平状态,需要外部上拉电阻)。因此,输出引脚只能拉低或保持高阻态,无法主动提供高电平。
模式 | 推挽输出(Push-Pull) | 开漏输出(Open-Drain) |
---|---|---|
高电平 | P-MOS激活 N-MOS断开 3.3v | P-MOS断开 N-MOS断开 由外部提供电压 |
低电平 | P-MOS断开 N-MOS激活 0v | P-MOS断开 N-MOS激活 0v |
优点 | 可以直接输出3.3v | 由外部电路决定,更灵活(上拉电阻) |
缺点 | 只能输出3.3v | 高电平实际是高阻态,无法输出电流 |
线与 | × | √ |
场景 | 单向通信 | 双向通信 |
电平转换 | × | √ |
功耗 | 高电平功耗较大 | 上拉电阻 |
电流驱动能力 | 能驱动较大负载(数字信号处理、PWM、LED驱动) | 仅能驱动较小负载,需外部上拉电阻(I2C等多设备通过同一信号线通信) |
推挽输出
推挽输出的最大特点是可以真正的输出高电平和低电平,在两种电平下都具有驱动能力 。
- 所谓的驱动能力,就是指输出电流的能力。
推挽输出(
Push-Pull Output
),故名思意能输出两种电平,一种是推(拉电流,输出高电平),一种是挽(灌电流,输出低电平)。
- 推挽输出可以使用一对开关来实现,在芯片中一般使用晶体管 / 场效应管。
如上图所示,分别是推和挽,详细过程是:
- 推:当输入信号为低电平时,P-MOS 导通,电流从 VDD 经过它到输出引脚。此时 N-MOS 截止。
- 挽:当输入信号为高电平时,N-MOS 导通,电流从输出引脚经过它到 VSS。此时 P-MOS 截止。
推挽输出不能实现线与
- 推挽操作不允许在总线配置中把多个设备连接在一起,只能单向线路的接口(例如 SPI、UART)如果当两个推挽输出结构相连在一起,一个输出高电平,即上管导通,下管闭合;同时另一个输出低电平,即上管闭合,下管导通时。电流会从第一个引脚的 VCC 通过上管再经过第二个引脚的下管直接流向 GND。整个通路上电阻很小,会发生短路,进而可能损害端口。
开漏输出
开漏(
OD
,Open Drain Output
)指打开MOS
管的漏极
P-MOS
始终截止- 当内部晶体管关闭时,输出引脚呈现高阻态,不干扰外部电路。
- 开漏输出只有两种状态:低、高阻。如果需要输出高电平,则需要外加上拉电阻。
上拉电阻的参数控制
- 边沿斜率:线路本身有电容,上拉电阻与其耦合会构成低通滤波器,不同阻值会影响上升 / 下降沿的斜率。电阻越小,边沿越陡,信号传输效果越好。
- 功耗:如果上拉电阻阻值过小,当线被上拉时会导致过高的功耗
- 噪声:如果上拉电阻阻值过大,上拉会变弱,外部干扰噪声会更容易被线路拾取。
高阻态
核心特征是“断开”电路,它不会主动提供电流或电压,而是让电路与外部设备“透明”连接,通常在多设备共享总线或信号线时使用,以避免冲突或干扰。
- 没有电流流动:在高阻态下,输出端基本不会提供电流或电压,相当于“断开”了电路。它的输入阻抗非常高,通常接近无穷大。
- 不干扰电路:由于没有电流流动,它不会影响其他电路或设备的工作,特别是在多个设备共享同一条总线时。
复用输出
根据控制来源的不同将输出分为普通输出模式和复用开漏输出