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

GPIO的理解

1.GPIO是什么?

字面意思就是通用输入输出,是一个MCU内部,用来做输入输出的控制器电路;

2.GPIO初步理解

本质就是输入输出高低电平(模拟信号),达到获取外设信息,控制外设的⽬的。

“通⽤”,意思就是⼀个东西被发明出来,就是未来给“⼤家”⽤的。这里的大家指的是MCU内部的其他片上外设,我们把其他片上外设使用GPIO这个来输出高低电平或者模拟信号这样一种工作就叫复用GPIO。

3.GPIO 引脚与IO

MCU 上⾯的引脚,通常会外接各种外设,⽐如:LED灯、按键,蜂鸣器, EEROM 等,⽽未来MCU 内部会有对应的输⼊输出寄存器,向对应的寄存器写或者读取对应的寄 存器,就可以从引脚中输出⾼低电平,或者获取引脚⾼低电平。

输⼊(Input):⽐如外接“按钮”, MCU 主要通过感知外部世界的状态变化,⽐如:按键是否被按 下?某个信号是⾼电平还是低电平?来获取外部信息。
按键不摁下,针脚接⼊ VDD ,GPIO 就会获取到⾼电平
当按键摁下,针脚接⼊ GND/VSS ,GPIO 就会获取到低电平

输出(Output):⽐如外接发光⼆极管(LED)。 鸣器响?控制继电器通断?)
GPIO 输出低电平, VDD 反向导通,⼩灯泡点亮
GPIO 输出⾼电平,⼩灯泡左右电压⼀致,没有定压差,就没有电流,⼩灯泡熄灭

注意:
GPIO 不⼀定输出⾼电平,就会“有效”,⽐如输出⾼电平,⽆法点亮⼩灯泡⼀样。

MCU 芯⽚上的这些GPIO 管脚⼜是怎么和外围器件产⽣关联的呢?
MCU 上⾯的引脚,通常会外接各种外设,⽐如:LED灯、按键,蜂鸣器, EEROM 等 MCU 内部会有对应的输⼊输出寄存器,向对应的寄存器写或者读取对应的寄 存器,就可以从引脚中输出⾼低电平,或者获取引脚⾼低电平。

pin:就是引脚的意思;
port:端口的意思,在计算机科学中引申为“数据交换的 ⼊⼝或出⼝”,现代微控制器(如 STM32 )继承了这⼀概念,将⼀组GPIO 引脚称为“GPIO PORT ”(如GPIOA 、 GPIOB ),因为它们本质上是芯⽚与外部世界的“数据交换接⼝”。

GPIO Pin一个硬件电路的位置


上I下O

4.GPIO工作模式

GPIO 主要是负责 MCU 的输⼊和输出,即 I/O 问题,⽽ GPIO 输⼊和输出,会存在很多的⼯作模 式。
输出:
通⽤推挽输出
通⽤开漏输出
复⽤推挽输出
复⽤开漏输出

输入:
浮空输⼊
上拉输⼊
下拉输⼊
模拟输⼊

GPIO 不仅仅给ARM-CPU 直接做输⼊输出,也会被其他⽚上外设使⽤,换句话说, GPIO 是"⼤家的",满足不同片上外设在不同场景下的IO需求,所以有八种工作模式。

通⽤与复⽤是什么意思?

所谓通⽤,就是通常使⽤,指的是由ARM-CPU 直接控制 GPIO 输出
所谓复⽤,复⽤的意思就重复使⽤,指的就是MCU 内部的⽚上外设,复⽤GPIO进⾏输⼊输出


简化成:

输出角度:GPIO输出电路中,包含输出数据寄存器,未来被arm-cpu进行写入的,从而实现控制pin输出高低电平的目的。
复用器:多组输入信号中,选择一个作为有效输入;GPIO到底是被ARM-CPU直接使⽤,还是被其他⽚上外设使⽤,达到复⽤效果,就由它说了算

P-MOS:从S到D
N-MOS:从D到S

P-MOS和N-MOS本质就是一个开关,通过小电压,通过控制开关的手段,达到控制大电流的目的。

GPIO 输出电路图中,上⽅是 P-MOS ,下⽅是 N-MOS
两者 D 极相接,P-MOS S 极接 VDD(3.3V) ,N-MOS S 极接地(GND ,当成 0V 就可以)

再次简化

通⽤推挽输出(Push-PullOutput):

交替闭合或者开启 P-MOS 和 N-MOS 即可;
输出数据寄存器写1,闭合 P-MOS ,断开 N-MOS ,输出⾼电平
输出数据寄存器写0,断开 P-MOS ,闭合 N-MOS ,输出低电平
推挽模式:输出寄存器上的 0 激活 N-MOS, 而输出寄存器上的 1 将激活 P-MOS 。

使⽤⼀对互补的晶体管(通常是 CMOS ⼯艺的 P-MOS 和 N-MOS 管)来输出⾼电平 (提供电流,“推”)或 输出低电平(吸收/拉取电流,“挽”)。

本质是交替闭合断开, P-MOS 和 N-MOS 开关,让外部引脚接⼊ VDD 或者接地,进 ⽽对外呈现出⾼电压和低电压,然后因为电路通路,形成有输出电流(推)和吸收(挽)电 流的效果

推挽模式下,向输出寄存器写 输出电压,打开指定 1/0 的本质:是让输出控制器选择 P-MOS ,还是 N-MOS ,进⽽ MOS 管.

通⽤开漏输出(Open-DrainOutput)

去掉 P-MOS ,让 P-MOS 永远都关闭,只使用N-MOS

在开漏模式下, MCU 针对特定引脚的输出,都是该引脚对应的 N-MOS 的漏极输出

向输出数据寄存器写 1 ,最终表⽰的是 N-MOS 断开
向输出数据寄存器写 0 ,表⽰ N-MOS 管闭合

输出数据寄存器写0, N-MOS 闭合,输低电平
输出数据寄存器写1, N-MOS 断开,输出⾼阻抗
所谓⾼阻抗,只是⼀种说法,真实情况其实是MCU和外部针脚彻底断开,相当于开路了,或 者 N-MOS D 漏极和外部引脚互相悬空了
对于针脚⽽⾔,如果内部 MCU 断开了和外部引脚的连接,可以把 MCU 认为成为⼀个阻值⽆穷⼤的设备,我们把这种情况,叫做输出⾼阻抗

开漏模式,输出只能输出低电平和⾼阻抗,⽆法输出⾼电平

开漏输出
开漏输出全称叫做漏极开路输出;
没有了 P-MOS ,那么 N-MOS 的D 漏极 ,就相当于什么都没有接!所以叫做漏极开路,简称开漏
不要把引脚当做设备,引脚当做 D 漏极线的延伸;
推挽输出下,P-MOS 和 N-MOS 互为彼此D漏极接⼊的设备,不属于开漏

因此可以知道:开漏输出电路有输出低电平和开路(⾼阻)2个状态。那如何才能输出 ⾼电平呢?

通过上拉电阻将 I/O ⼝接通到上拉的电压。因为 拉的电压,必须是开发板设计者,在 MCU 内部电路已经设计好,所以往往这个所谓的上 MCU 外部,根据⾃⼰的需求设计的。

注意:
单⽚机内部,不是只有 MCU 内部有 VDD 供电,其他MCU 外部的设备,或者 MCU 内部的其他设备,也可能会有⾃⼰的供电源提供⾼电压。比如:你家(单⽚机)⾥有很多家⽤电器(外设控制器和外设),不⽌电视要供电,冰箱洗⾐机也要的

那么,在开漏模式下,要输出⾼电平,就必须在引脚位置设置上拉电阻,来提供⾼电压了。
新增上拉电阻之后:
输出数据寄存器写 0 , N-MOS 闭合,输低电平,图略
输出数据寄存器写 1 , N-MOS 断开,输出⾼阻抗,外部引脚在外部上拉电阻的影响(或者上拉) 下,输出⾼电平

开漏输出⾼阻抗之后,引脚就是⾼电平:
⼀个电路回路中,电压会被各个元器件承接,电阻值越⾼,承压越⾼

http://www.jsqmd.com/news/1398174/

相关文章:

  • AOSP -- 第一章 概述
  • YOLO目标检测实战:从零到一快速上手训练与部署
  • 上海服务咨询选哪家
  • RedHat Linux磁盘扩容实战:从GPT分区到XFS文件系统挂载
  • 蓝奏云解析工具 LanzouAPI 完整实战指南:三步部署,让加密资源秒变高速直链
  • 微信聊天记录导出备份:免费开源 WeChatMsg,把十年对话永久装进自己的保险箱
  • Java大厂面试实录:Spring Boot、Redis缓存、Kafka消息队列、微服务与JVM实战问答
  • RA-FinBERT:融合规则感知的低资源金融文本情感分类实战
  • 从提示词工程到交互架构:动态感知与多模态协同
  • SpringBoot监听Redis键事件:从Pub/Sub原理到生产环境实战
  • Agent Memory:从上下文管理到持续学习的完整闭环
  • 无需登录也能畅玩:Prism Launcher离线启动Minecraft的完整指南
  • H3C 防火墙多网段接入公司网络方案
  • 教学方式对考试成绩的ANOVA:不同教学方法的效果比较
  • OpenSSL API实战指南:从核心对象到安全配置的C/C++开发详解
  • 2026年值得信赖的驾校推荐,体验服务品质之选 - mypinpai
  • Ubuntu Ollama 搭建私有大模型部署 垂直投喂RAG
  • 工业异地协同运维底座解析:基于边缘节点的加密维护隧道建立与 OEE 数据聚合实战
  • Al辅助{白话文}IDEA中安装ClaudeCode辅助编程学习
  • Python爬虫实战:虎扑NBA数据抓取与分析
  • 群晖NAS网络故障排查:从IP消失到稳定连接的完整解决方案
  • AI驱动的产品级代码审查:从Claude Code实践到架构优化
  • 如何用 LPrint 快速统一管理所有品牌的标签打印机
  • 网盘下载慢到怀疑人生?5分钟上手支持8大网盘的直链下载助手
  • Playwright自动化测试与数据抓取实战:从入门到精通
  • 终极指南:如何快速将 QMCFLAC 加密音频一键无损转成 MP3
  • 5分钟搞定Windows和Office激活:KMS_VL_ALL_AIO智能激活工具完全指南
  • 硬盘直装Ubuntu双系统全攻略:从UEFI分区到驱动优化
  • 2026年南通PCB压合机品牌甄选:多层板研发与军工级品质的源头实力制造企业 - 卓企推荐
  • 从代码生成到智能体驱动开发:Agent+Skills+MCP架构实战