单片机的几种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;
相关推荐
茉莉玫瑰花茶10 小时前
Windows 平台下的 UDP 客户端
stm32·单片机·嵌入式硬件
磨十三12 小时前
U-Boot
arm开发·嵌入式硬件
笔夏12 小时前
【移芯平台CAT1模组】烧写固件
stm32·单片机·学习
十月的皮皮12 小时前
STM32从零到量产开发:四路继电器工业控制模块开发— 继电器模块bsp_di.h与 bsp_di.c文件
c语言·stm32·stm32cubemx·hal库
无垠的广袤13 小时前
【RA-Eco-RA4M2开发板】步进电机的串口控制和 LabVIEW 数据采集
单片机·嵌入式硬件·labview
茯苓gao14 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
wuyk55514 小时前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机
Mr+范14 小时前
单片机 ADC 电压与电流检测及电阻选型指南
单片机·嵌入式硬件
西城微科方案开发15 小时前
LCD智能婴儿秤方案
单片机·嵌入式硬件
三佛科技-1341638421217 小时前
灭蚊灯MCU方案开发,FT60E112-RB作为灭蚊灯主控芯片优势
单片机·嵌入式硬件·物联网·智能家居·pcb工艺