news 2026/9/30 2:26:07

GPIO

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GPIO

这次小编带来的是一些嵌入式基础理论概念,若有不正确的地方,欢迎一起探讨。

1.GPIO的基础知识

1.1GPIO的基本概念

1.1.1 GPIO是什么

GPIO即General Purpose Input/output,通用输入输出出口。是MCU的一个 内部结构,用来做输入输出的控制电路。

输入输出的本质就是输入输出高低电平,更严谨的来说就是可软件配置的外部引脚电路。从而达到获取外设信息,控制外设的目的。

输入的原因:这些高低电平,在上层语言层解释就是0/1,在下层硬件外设角度,就会被视为MCU控制外设的手段。

输出的原因:单片机的核心作用是“控制”,控制相关外设,就必须先获取外设相关的数据,然后根据外设状态数据变化,再通过输出控制外设或者报告给用户等。

复用GPIO:同一个物理引脚,通过多路选择器 MUX 切换控制权,交给片上外设(UART、SPI、I2C、PWM、CAN 等)接管,不再由 GPIO 寄存器控制高低电平。

需要复用GPIO的原因:引脚数量有限;减轻CPU负担。

1.1.2 GPIO Port与Pin的概念

Port:端口的意思,Port原意为“港口”,在计算机科学中引申为“数据交换的入口或出口”,现代微控制器(eg.STM32)继承了这一概念,将这一组GPIO引脚称为“GPIO Port”(eg.GPIOA,GPIOB),因为他们本质上是芯片与外部世界的“数据交换接口”。

Pin:就是引脚的意思。

之所以称为“GPIO Port”而不是“GPIO Group”是因为Group只能体现分组概念,体现不出来数据交换概念。Port在计算机领域,就有数据交换的概念之分。

1.1.3 GPIOA,GPIOB,GPIOC等端口

每组GPIO是一个独立外设,有自己的寄存器,每组端口最多包含16哥引脚:Px0~Px15(x=A/B/C/D...)

GPIOA、GPIOB、GPIOC 在存储器上映射到不同的基地址,所以操作 GPIOB 不会影响 GPIOA。

1.1.4 PA0,PA1,PB0等引脚编号

含义:PAx:Port A,第 x 号引脚,属于 GPIOA 端口;

PBx:Port B,第 x 号引脚,属于 GPIOB 端口;

PCx:Port C,第 x 号引脚,属于 GPIOC 端口;

逻辑引脚名(PA0、PB0):软件、原理图上用的名字,和寄存器对应。

芯片物理引脚号(Pin1、Pin2…):芯片封装上的引脚序号,和 PA0 没有数字上的对应关系。

PA0、PA1、PB0 是端口 + 组内序号的逻辑引脚名称,用来把代码里的寄存器位和芯片硬件引脚对应起来。

1.1.5 GPIO与MCU芯片引脚的对应关系

PA0/PA1/PB0 是逻辑引脚名;逻辑引脚通过芯片内部金属走线,固定连接到芯片封装上的物理引脚(Pin),这个映射关系由芯片厂商定义,写在芯片数据手册的引脚表中。

三层关系:软件层:GPIOA/GPIOB(端口外设),有一套寄存器;

逻辑引脚:PA0、PA1、PB0,对应端口寄存器的某一位;

硬件层:芯片物理引脚 Pin n,芯片外壳上的焊盘引脚;

GPIO并不是一个单独的“功能”,而是 MCU 与外部世界进行数字信号交互的基础接口。

1.2GPIO的内部结构

1. 2.1输入通道

引脚外部电平 → 保护二极管 → 上拉 / 下拉电阻 →施密特触发器(把模拟电平整形为标准数字 0/1) → 输入数据寄存器 IDR

施密特触发器:消除电平抖动,防止噪声误判高低电平。

1.2.2输出通道

输出数据寄存器 ODR(或者复用外设信号) → 输出驱动电路(PMOS+NMOS 管) → 芯片外部引脚。

1.2.3输入数据寄存器 IDR(GPIOx_IDR)

只读寄存器

每一位对应一个引脚:bit0 对应 PA0

作用:读取引脚当前外部电平,高电平读 1,低电平读 0。

IDR 反映的是芯片引脚上真实电平,不是 ODR 的值。

1.2.4输出数据寄存器 ODR(GPIOx_ODR)

可读写寄存器

写 1:让引脚输出高;写 0:让引脚输出低。

写 ODR 只是设置输出电平,最终引脚电平还要看输出驱动电路。

1.2.5上拉电阻 / 下拉电阻(片内)

由寄存器 PUPDR 控制开关:

上拉电阻:接通后,引脚默认被拉到 VCC。引脚悬空时电平为高。

下拉电阻:接通后,引脚默认被拉到 GND。引脚悬空时电平为低。

关闭:浮空(高阻态),悬空引脚电平不确定,容易受干扰。

1.2.6输出驱动电路(PMOS + NMOS 两个 MOS 管)

两种模式:

推挽输出:PMOS 和 NMOS 配合。输出高时 PMOS 导通;输出低时 NMOS 导通。驱动能力强,适合驱动 LED。

开漏输出:只使用 NMOS,PMOS 永远断开。输出 1 时引脚高阻;输出 0 时拉低。适合 I2C 这类总线。

1.2.7复用功能

GPIO 引脚可以把控制权交给片上外设(USART、SPI、TIM、ADC):

复用输出:引脚不再受 ODR 控制,由外设输出信号(如串口 TX)

复用输入:外部信号送入外设(串口 RX)

配置 MODER 为复用模式,再通过 AFR 寄存器选择具体复用功能。

2.GPIO的工作模式

2.1输出模式

通用,就是通常使用,指的是ARM-CPU直接控制GPIO输出。

复用,就是重复使用,指的是MCU内部的片上外设,复用GPIO进行输入输出。

复用器是从多组输入信号中,选择一个作为有效输入。GPIO到底是被ARM-CPU直接使用,还是被其他片上外设使用,达到复用效果,就有他说了算。

输出控制电路:接受内部逻辑电平,直接驱动输出级MOS管的栅极,控制其通断,从而将弱信号转换为具有足够驱动能力的外部输出电平。

补充:要理解GPIO输出先要理解P-MOS和N-MOS。

MOS:MOSFET,金属氧化物半导体场效应管。

P-MOS:P沟道金属氧化物半导体。

N-MOS:N沟道金属氧化物半导体。

P-MOS和N-MOS的本质是一个开关。

2.1.1通用推挽输出

核心思想:交替闭合或者开启P-MOS和N-MOS即可。

输出数据寄存器写1,闭合P-MOS,断开N-MOS,输出高电平。

输出数据寄存器写0,断开P-MOS,闭合N-MOS,输出低电平。

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

2.1.2通用开漏输出

核心思想:去掉P-MOS,让P-MOS永远关闭。

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

向输出数据寄存器写1,最终表示的是N-MOS断开。

向输出数据寄存器写0,表示N-MOS管闭合。

输出数据寄存器写0,N-MOS闭合,输低电平;

输出数据寄存器写1,N-MOS断开,输出高阻抗;所谓高阻抗,就是MCU和外部针脚彻底断开,相当于开路,或者N-MOS D漏极和外部引脚互相悬空。

开漏模式,输出只能输出低电平和高阻抗,无法输出高电平。

2.1.3复用推挽输出

核心思想:引脚输出控制权,从 GPIO 的 ODR 寄存器交给片上外设;输出驱动电路仍然是 PMOS+NMOS 推挽结构,高低电平都具备强驱动能力。

2.1.4复用开漏输出

核心思想:引脚输出控制权交给片上外设,不再受 ODR 寄存器控制;输出驱动采用开漏结构,输出低电平时导通拉低,输出高电平时为高阻态。

2.2输入模式

2.2.1浮空输入

断开下拉电阻开关,断开上拉电阻开关。

2.2.2上拉输入

闭合上拉电阻开关,断开下拉电阻开关。

开关在MCU内部,可以通过MCU提供的配置寄存器选择闭合还是断开某一个开关。

2.2.3下拉输入

闭合下拉电阻开关,断开上拉电阻开关。

2.2.4模拟输入

关闭该引脚的数字输入输出电路(施密特触发器、上下拉电阻、输出驱动全部关闭),把外部连续变化的模拟电压直接送入 ADC 模数转换模块,用来采集电压信号。

以上就是小编本期带来的内容。若有不当之处,欢迎指正。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 2:24:35

如何参与HBase开源贡献:从能编译的源码到第一个PR的4个实操步骤

如何参与HBase开源贡献:从能编译的源码到第一个PR的4个实操步骤 【免费下载链接】hbase Apache HBase 项目地址: https://gitcode.com/GitHub_Trending/hb/hbase Apache HBase是构建在Hadoop与HDFS之上的高可靠、高性能面向列的分布式存储系统,用…

作者头像 李华
网站建设 2026/9/30 2:23:34

RPCS3 汉化补丁 3 步装好:yml 文件怎么放、加载失败怎么办

RPCS3 汉化补丁 3 步装好:yml 文件怎么放、加载失败怎么办 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 这篇文章讲 RPCS3 汉化补丁的安装。你跟着 3 步走完,把 yml 文件…

作者头像 李华
网站建设 2026/9/30 2:23:23

挑战一周学会 ROS(第八天)

今天开始学习机器人导航模块关键技术:1.全局地图(全局概览图:定位路径规划)2.自身定位(确定在地图中的位置)3.路径规划(全局路径规划局部路径规划)4.运动控制(控制前进速…

作者头像 李华
网站建设 2026/9/30 2:23:00

【Docker】网络

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:Docker_秦jh_的博客-CSDN博客 ​​​​​ 目录 Docker Network(网络) Docker 为什么需要网络管理 Docker 网络架构简介 CNM Libnetwor…

作者头像 李华
网站建设 2026/9/30 2:22:23

如何用命令行管理百度网盘:BaiduPCS-Go 实战教程

如何用命令行管理百度网盘:BaiduPCS-Go 实战教程 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go 一个常见场景:每天凌晨&#xff0c…

作者头像 李华