当前位置: 首页 > 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.lryc.cn/news/596342.html

相关文章:

  • Linux CentOS 虚拟机升级内核至4.x以上版本
  • 对随机生成的html文件做标签简析
  • CentOS 7 安装nginx
  • Docker/DockerHub 镜像源可用列表
  • AWS: 云上侦探手册,七步排查ALB与EC2连接疑云
  • Apache Ignite 索引(Indexes)定义和使用
  • 实操:AWS CloudFront的动态图像转换
  • 服务器租用:网络钓鱼具体是指什么?
  • 扇形区域拉普拉斯方程傅里叶解法2
  • Windows Cmake Vs2017/2010 编译安装Protobuf
  • 算法训练营day28 贪心算法②122.买卖股票的最佳时机II、55. 跳跃游戏、 45.跳跃游戏II 、1005.K次取反后最大化的数组和
  • Flutter基础(前端教程①⑦-Column竖直-Row水平-Warp包裹-Stack堆叠)
  • Flutter基础(前端教程①⑨-margin-padding)
  • 全星FMEA软件系统:FMEA、PC、PFD一体化管理的智能解决方案
  • Scrapyd与ScrapydAPI深度解析:企业级爬虫部署与管理解决方案
  • ComfyUI怎样通过接口调用?如何接入dify?
  • 我的第一个开源项目 -- 实时语音识别工具
  • patch-package 教程
  • 什么是AI思维:它是智能优先与世界模型重构商业逻辑
  • 当直播间告别“真人时代”:AI数字人重构商业新秩序
  • 卷积操作尺寸计算公式
  • @DateTimeFormat、@JsonFormat、@JSONField区别及用法
  • Linux_基础IO详解
  • 聊聊DevOps,开发与运维如何分工协作?
  • 什么是检索增强生成(RAG)?
  • 引擎动画系统设计
  • 【PTA数据结构 | C语言版】不相交集基本操作
  • Visual Studio Code 远端云服务器开发使用指南
  • 服务器连接Hugging Face
  • 【机器学习深度学习】微调量化与模型导出量化:区分与应用