聊聊GPIO 工作模式

嵌入式开发中,GPIO(General-Purpose Input/Output)是最基础也最常用的功能模块之一。你可以把它想象成微控制器伸出来的无数根"手脚":既可以用它输出 信号去点亮LED、驱动外设,也可以用它输入信号来检测按键、读取传感器状态。

输出模式-主动出击

1)推挽输出 (Push-Pull Output)

Plain 复制代码
      VDD(3.3V)
        │
        ├───[PMOS]───┐
        │            │
        │            ├───● GPIO引脚
        │            │
        └───[NMOS]───┘
        │
       GND(0V)

工作原理:

  • 输出高电平(1):PMOS打开,NMOS关闭 → 引脚接电源VDD(3.3V)
  • 输出低电平(0):NMOS打开,PMOS关闭 → 引脚接地GND(0V)

使用场景:控制LED灯、数字信号输出

2)开漏输出 (Open-Drain Output)

Plain 复制代码
       VDD(内部无连接!)
        │
        │
        X ← [PMOS被拆除]
        │
        └───[NMOS]───● GPIO引脚
        │
       GND

工作原理

  • 输出低电平:NMOS打开 → 接地
  • 输出高电平:NMOS关闭 → 悬空(高阻态)→ 必须外接上拉电阻到VDD才能输出高电平

使用场景:I²C/SMBus 总线 (多设备共享线路)、驱动高压设备 (外接上拉到 5V/12V)、多主机通信

输入模式-竖起耳朵听

1)浮空输入 (Floating Input)

Plain 复制代码
       VDD
        │
        │
        X ← 无内部上拉
        │
GPIO引脚 ┼───● 输入检测电路
        │
        X ← 无内部下拉
        │
       GND
  • 引脚完全断开内部电阻
  • 电平状态完全由外部电路决定

必须使用场景:ADC 模拟信号采样

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

Plain 复制代码
上拉输入结构:

       VDD
        │
        │
        R(≈40kΩ)← 内部上拉电阻
        │
GPIO引脚 ┼───● 输入检测电路
        │
        X
        │
       GND
下拉输入结构:

       VDD
        │
        │
        X
        │
GPIO引脚 ┼───● 输入检测电路
        │
        R(≈40kΩ)← 内部下拉电阻
        │
       GND

工作原理

  • 上拉输入:无外部信号时默认高电平(3.3V)
  • 下拉输入:无外部信号时默认低电平(0V)

按键检测:按键接地型电路、按键接VCC型电路

注意

  1. 开漏输出必须外接上拉电阻:阻值依总线速度和功耗选择 (常用 4.7KΩ)
  2. 推挽输出禁止并联:会导致 VDD-GND 短路损坏MOS管
  3. 输入电平容限:
    1. 5V容忍引脚:可承受 5V 输入
    2. 非容忍引脚:输入电压 ≤ VDD+0.3V
  4. 模式切换:读输入前需切换为输入模式(尤其输出转输入时)
  5. 静电防护:未使用引脚设为下拉/推挽输出低电平
相关推荐
晚风吹长发34 分钟前
二分查找算法+题目详解
c++·算法·二分查找
飞凌嵌入式1 小时前
【玩转多核异构】T153核心板RISC-V核的实时性应用解析
linux·嵌入式硬件·嵌入式·risc-v
罗义凯1 小时前
其中包含了三种排序算法的注释版本(冒泡排序、选择排序、插入排序),但当前只实现了数组的输入和输出功能。
数据结构·c++·算法
怎么就重名了1 小时前
STM32+蓝牙模块+超声波模块+QT
stm32·嵌入式硬件·qt
春蕾夏荷_7282977252 小时前
c++ easylogging 使用示例
c++·log·easylogging
syt_biancheng2 小时前
Day3算法训练(简写单词,dd爱框框,3-除2!)
开发语言·c++·算法·贪心算法
oshan20123 小时前
小华HC32L136K8TA 单片机新建 MDK5 工程模板(二)
单片机·嵌入式硬件
自然数e3 小时前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
三品吉他手会点灯3 小时前
STM32F103学习笔记-16-RCC(第4节)-使用 HSI 配置系统时钟并用 MCO 监控系统时钟
笔记·stm32·单片机·嵌入式硬件·学习
2401_861277554 小时前
软考程序员2016年上半年二叉排序树案例题解答
c语言·决策树·链表