嵌入式开发中,GPIO(General-Purpose Input/Output)是最基础也最常用的功能模块之一。你可以把它想象成微控制器伸出来的无数根“手脚”:既可以用它输出信号去点亮LED、驱动外设,也可以用它输入信号来检测按键、读取传感器状态。
输出模式-主动出击
1)推挽输出 (Push-Pull Output)
VDD(3.3V)│├───[PMOS]───┐│ ││ ├───● GPIO引脚│ │└───[NMOS]───┘│GND(0V)
工作原理:
- 输出高电平(1):PMOS打开,NMOS关闭 → 引脚接电源VDD(3.3V)
- 输出低电平(0):NMOS打开,PMOS关闭 → 引脚接地GND(0V)
使用场景:控制LED灯、数字信号输出
2)开漏输出 (Open-Drain Output)
VDD(内部无连接!)││X ← [PMOS被拆除]│└───[NMOS]───● GPIO引脚│GND
工作原理
- 输出低电平:NMOS打开 → 接地
- 输出高电平:NMOS关闭 → 悬空(高阻态)→ 必须外接上拉电阻到VDD才能输出高电平
使用场景:I²C/SMBus 总线 (多设备共享线路)、驱动高压设备 (外接上拉到 5V/12V)、多主机通信
输入模式-竖起耳朵听
1)浮空输入 (Floating Input)
VDD││X ← 无内部上拉│
GPIO引脚 ┼───● 输入检测电路│X ← 无内部下拉│GND
- 引脚完全断开内部电阻
- 电平状态完全由外部电路决定
必须使用场景:ADC 模拟信号采样
2)上拉/下拉输入 (Pull-up/Pull-down Input)
上拉输入结构:VDD││R(≈40kΩ)← 内部上拉电阻│
GPIO引脚 ┼───● 输入检测电路│X│GND
下拉输入结构:VDD││X│
GPIO引脚 ┼───● 输入检测电路│R(≈40kΩ)← 内部下拉电阻│GND
工作原理:
- 上拉输入:无外部信号时默认高电平(3.3V)
- 下拉输入:无外部信号时默认低电平(0V)
按键检测:按键接地型电路、按键接VCC型电路
注意
- 开漏输出必须外接上拉电阻:阻值依总线速度和功耗选择 (常用 4.7KΩ)
- 推挽输出禁止并联:会导致 VDD-GND 短路损坏MOS管
- 输入电平容限:
- 5V容忍引脚:可承受 5V 输入
- 非容忍引脚:输入电压 ≤ VDD+0.3V
- 模式切换:读输入前需切换为输入模式(尤其输出转输入时)
- 静电防护:未使用引脚设为下拉/推挽输出低电平