单片机的几种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库):

// 推挽输出
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;

 

posted @ 2025-07-22 20:50  我是标同学  阅读(0)  评论(0)    收藏  举报  来源