单片机的几种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;
相关推荐
雨疏风骤12404 小时前
ROM与RAM,储存地址、链接地址以及运行地址
linux·stm32·嵌入式·linux嵌入式
深耕AI4 小时前
【恍然大悟】8位单片机如何处理大数与二进制乘法?
单片机·嵌入式硬件
z20348315205 小时前
智能台灯控制面板
单片机·嵌入式硬件
钿驰科技5 小时前
TC-BL3650驱动板在无刷减速电机的应用
单片机·嵌入式硬件
深耕AI5 小时前
【单片机】解密STC89C52
单片机·嵌入式硬件
三佛科技-134163842125 小时前
FT32F072xx、FT32F072xB、FT32F072x6/x8基于ARM Cortex-M0内核32位单片机分析
arm开发·单片机·嵌入式硬件·智能家居·pcb工艺
清风6666665 小时前
基于单片机的火焰与温度联动检测及声光灭火控制系统
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
chen_mangoo5 小时前
Rockchip debian预置安装deb包
linux·驱动开发·嵌入式硬件
梁山1号5 小时前
【关于CAN】
c语言·stm32·单片机
尼喃5 小时前
汽车摩托车LED车灯驱动芯片IC,精准调光抗干扰,为车灯性能提升赋能
单片机·汽车·51单片机·芯片