底层模型
所有数字 IO 口,内部本质就是两个电子开关(MOS 管):
-
上管 PMOS:一头接 VCC(电源)
-
下管 NMOS :一头接 GND(地)中间连在一起,就是引脚 Pin
VCC | [上开关] |----引脚----
|
[下开关]
|
GND
不同模式,就是这两个开关怎么开、怎么关的区别
不同模式,就是这两个开关怎么开、怎么关的区别。
1. 浮空输入(Floating Input)
两个开关:全部断开
- 上管:关
- 下管:关
引脚既不接电源,也不接地,完全悬空。
特点:
- 引脚是高阻态,几乎不耗电
- 电平完全由外部电路决定
- 外部没接线 → 电平乱飘、受干扰
- 只适合有明确外部信号的输入
一句话:浮空 = 引脚悬空,谁来谁说了算,没人来就发疯。
2. 上拉输入 / 下拉输入
这两个其实是带电阻的浮空,为了防止乱飘。
上拉输入(Pull-up)
内部加一个电阻接到 VCC
- 外部没信号 → 默认为高电平
- 外部接 GND → 变低
下拉输入(Pull-down)
内部加一个电阻接到 GND
- 外部没信号 → 默认为低电平
- 外部接 VCC → 变高
用途:按键、拨码开关,防止引脚乱跳。
3. 推挽输出(Push-Pull)
最标准、最常用的输出模式
两个开关互斥工作:
- 输出高电平 → 上管开,下管关 → 直接接 VCC
- 输出低电平 → 下管开,上管关 → 直接接 GND
特点:
- 能主动输出强高、强低
- 驱动能力强
- 不能多个芯片输出接同一条线(会短路打架)
一句话:推挽 = 既能强拉到高,也能强拉到低,力气大。
4. 开漏输出(Open-Drain)
只留下管,拆掉上管
- 输出 0 → 下管开 → 强拉低
- 输出 1 → 下管关 → 引脚浮空
它自己出不来高电平,必须靠:
- 外部加上拉电阻到 VCC
- 电阻把线 "拽" 到高电平
特点:
- 只能拉低,不能拉高
- 多个开漏可以接同一条线(线与逻辑)
- 方便做电平转换(3.3V ↔ 5V)
典型应用:I2C、OneWire、通信总线
一句话:开漏 = 只会往下拉,高电平靠外部电阻帮忙。
5. 开漏带上拉(Open-Drain + Pull-up)
有些单片机支持开漏 + 内部上拉相当于:
- 开漏输出
- 内部自带小电阻,不用外部接
适合简单低速通信。
6. 模拟输入(Analog Input)
彻底关闭所有数字电路,只给 ADC 采样。
- 高阻
- 不识别高低电平,只测电压
一张表彻底看懂
| 模式 | 上管 | 下管 | 能主动出高? | 能主动出低? | 典型用途 |
|---|---|---|---|---|---|
| 浮空输入 | 关 | 关 | 否 | 否 | 外部强驱动信号 |
| 上拉输入 | 关 + 电阻 | 关 | 否 | 否 | 按键 |
| 下拉输入 | 关 | 关 + 电阻 | 否 | 否 | 按键 |
| 推挽输出 | 可控 | 可控 | 是 | 是 | LED、继电器、普通输出 |
| 开漏输出 | 关 | 可控 | 否(靠外部电阻) | 是 | I2C、多设备共总线 |
最关键的三句总结
- 推挽:既能拉高也能拉低,力气大,不能共线
- 开漏:只能拉低,高靠电阻,适合多设备共用一根线
- 浮空:啥都不接,外部说了算,容易乱飘