当前位置: 首页 > news >正文

单片机的几种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 ──┘ (禁用)│GNDVDD│├──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;

 

http://www.dtcms.com/a/293447.html

相关文章:

  • JavaWeb学习打卡11(cookie(甜点)详解)
  • iView Table组件二次封装
  • RAG实战指南 Day 21:检索前处理与查询重写技术
  • 数据库隔离级别
  • SQL语句中锁的使用与优化
  • 正则表达式:文本处理的强大工具
  • 傲软录屏 专业高清录屏软件 ApowerREC Pro 下载与保姆级安装教程!!
  • 3.5 模块化编程实践
  • 路径平滑优化算法--Polynomial Spiral(多项式螺旋法)
  • JavaScript 02 数据类型和运算符数组对象
  • JavaScript 03 严格检查模式Strict字符串类型详解
  • 【金融机器学习】第四章:风险-收益权衡——Bryan Kelly, 修大成(中文翻译)
  • Linux Bridge Cost
  • Qt多语言支持初步探索
  • Jmeter使用 - 2
  • 【小学】小学学习资料合集(不定时更新,有需要及时保存,避免失效)
  • ubuntu 20.04 安装 cmake 3.26
  • error C++17 or later compatible compiler is required to use ATen.
  • Spring相关概念
  • 在腾讯云上安装gitlab
  • 《C++》面向对象编程--类(中)
  • Linux的进程管理源码相关内容梳理
  • 京东视觉算法面试30问全景精解
  • 洛谷 B3939:[GESP样题 四级] 绝对素数 ← 素数判定+逆序整数
  • 滑动窗口经典问题整理
  • 三维DP深度解析
  • 数学与应用数学专业核心课程解析
  • 【编程练习】
  • day 32 打卡
  • Linux中信号认识及处理和硬件中断与软中断的讲解