单片机的几种GPIO输入输出模型详解

模式选择汇总参考表:

模式 输出驱动 输入阻抗 默认状态 典型应用场景
推挽输出 强驱动 禁用 可配置 LED, SPI, 高速信号
开漏输出 弱驱动 禁用 低/悬空 I²C, 电平转换, 线与
浮空输入 禁用 极高 不确定 外部强驱动信号
上拉输入 禁用 中高 高电平 按键(接地型), 数字输入
下拉输入 禁用 中高 低电平 按键(接VDD型), 中断
模拟输入 禁用 极高 ADC, 模拟信号采集

输出模式:

1. 推挽输出 (Push-Pull)

复制代码
       VDD
        │
        ├──P-MOS◯──┐ (受控导通)
        │         │
控制逻辑─┤         ├───GPIO引脚
        │         │
        ├──N-MOS◯──┘ (受控导通)
        │
       GND

工作状态:
高电平:P-MOS导通,N-MOS截止 → 引脚=VDD
低电平:P-MOS截止,N-MOS导通 → 引脚=GND
  • 特点

    • 双MOS管协同工作(P管拉高,N管拉低)

    • 可主动输出高/低电平

    • 驱动能力强(典型20mA),多个IO之间不可以直接并联,否则短路

  • 应用

    • LED控制

    • 驱动继电器

    • SPI、UART通信

    • 高速数字信号

2. 开漏输出 (Open-Drain)

复制代码
       VDD
        │
        ├──P-MOS ──┐ (永久禁用)
        │         │
控制逻辑─┤         ├───GPIO引脚───┬──外部上拉电阻──VDD_EXT
        │         │             │ (可选不同电压)
        ├──N-MOS◯──┘ (受控导通)  │
        │                      ▼
       GND                    GND

工作状态:
低电平:N-MOS导通 → 引脚=GND
高电平:N-MOS截止 → 引脚悬空(需外部上拉)
  • 特点

    • 只有N-MOS工作

    • 高电平依赖外部上拉

    • 支持"线与"连接,即多个IO之间可以直接并联

  • 应用

    • I²C/SMBus总线

    • 电平转换(3.3V↔5V)

    • 多设备中断共享

    • 开关键控

输入模式:

1. 浮空输入 (Floating Input)

复制代码
       VDD
        │
        ├──P-MOS ──┐ (禁用)
        │         │
控制逻辑─┤         ├───GPIO引脚───外部信号源
        │         │
        ├──N-MOS ──┘ (禁用)
        │
       GND
        ▲
        │
  无上拉/下拉
  • 特点

    • 完全悬空状态

    • 高阻抗输入(>1MΩ)

    • 易受干扰

  • 应用

    • 外部明确驱动的信号

    • ADC输入前级

    • 高速数字信号接收

2. 上下拉输入 (Pull-up Input)

复制代码
       VDD
        │
        │ 内部上拉电阻(30-50kΩ)
        ├───┬──────┐
        │   │      │
        ├──P-MOS ──┤ (禁用)
        │         │
控制逻辑─┤         ├───GPIO引脚
        │         │
        ├──N-MOS ──┘ (禁用)
        │
       GND




       VDD
        │
        ├──P-MOS ──┐ (禁用)
        │         │
控制逻辑─┤         ├───GPIO引脚
        │         │
        ├──N-MOS ──┘ (禁用)
        │
       GND
        ▲
        │
  内部下拉电阻(30-50kΩ)
  • 特点

    • 内部上拉电阻使能

    • 默认高电平

    • 抗干扰能力增强

  • 应用

    • 按键检测(按键接地)

    • 数字传感器输入

    • 默认高有效的信号

3. 模拟输入 (Analog Input)

复制代码
       VDD
        │
        ├──P-MOS ──┐ (禁用)
        │         │
控制逻辑─┤         ├───GPIO引脚───┬──ADC输入
        │         │             │
        ├──N-MOS ──┘ (禁用)      ▼
        │                  模拟信号源
       GND
  • 特点

    • 完全断开数字电路

    • 高阻抗模式(>10MΩ)

    • 无上拉/下拉

  • 应用

    • ADC采样

    • 模拟传感器接口

    • 精密测量电路

实际配置示例(STM32 HAL库):

cpp 复制代码
// 推挽输出
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

// 开漏输出(I²C)
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;

// 上拉输入(按键检测)
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;

// 下拉输入
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;

// 模拟输入(ADC)
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
相关推荐
GilgameshJSS8 小时前
STM32H743-ARM例程23-USB_HID
arm开发·stm32·嵌入式硬件
日更嵌入式的打工仔10 小时前
存储同步管理器SyncManager 归纳
笔记·单片机·嵌入式硬件
社会大青年11 小时前
STM32 GPIO-------设置成51单片机模式输出
stm32·嵌入式硬件·51单片机
麻辣长颈鹿Sir11 小时前
单片机进入 B. 中断无限循环异常解决方法
单片机·嵌入式硬件·b.中断·异常中断处理·程序无限循环异常处理·芯海spi异常中断·芯海芯片
red watchma11 小时前
Xshell->MCU Ymodem协议实现
网络·单片机·嵌入式硬件
XINVRY-FPGA11 小时前
XC7A100T-2FGG484I Xilinx Artix-7 FPGA
arm开发·嵌入式硬件·fpga开发·硬件工程·信息与通信·信号处理·fpga
lingzhilab12 小时前
零知IDE——基于STM32F407VET6和ESP-01的SHT2X温湿度监测与云传输系统
stm32·单片机·嵌入式硬件
国科安芯12 小时前
高辐射环境下AS32S601ZIT2型MCU的抗辐照性能与应用潜力分析
网络·人工智能·单片机·嵌入式硬件·fpga开发
Rousson15 小时前
硬件学习笔记--82 连接器的选用原则与流程
笔记·单片机·学习
三佛科技-1341638421215 小时前
高速风筒方案开发 高速风筒MCU控制方案设计
单片机·嵌入式硬件·智能家居·pcb工艺