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 模数转换模块,用来采集电压信号。

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

相关推荐
Brilliantwxx1 小时前
【STM32】 __weak 弱引用、中断标志位、异常处理与 HAL_Delay 优先级
开发语言·stm32·单片机·嵌入式硬件
离凌寒3 小时前
一、关于正点原子stm32mp157上的hdmi显示效果补充演示
stm32·单片机·嵌入式硬件
iCxhust10 小时前
51单片机电力载波应用开发(4)单片机发PC端接收
单片机·嵌入式硬件·51单片机
国科安芯12 小时前
断电也隔离、听得真:ASL3159S 单通道 SPDT 模拟开关的“断电保护 + 音频保真“账
单片机·嵌入式硬件·安全·商业航天·抗辐射
自小吃多12 小时前
【Verilog/FPGA】存储器(数组)
嵌入式硬件·fpga开发
szxinmai主板定制专家13 小时前
RK3588+FPGA异构架构|高速数据采集+边缘AI落地应用全解析
人工智能·嵌入式硬件·fpga开发·架构·zynq
M78佐菲13 小时前
ARM学习笔记(11)
linux·arm开发·笔记·嵌入式硬件·学习
M78佐菲13 小时前
ARM学习笔记(10)
linux·arm开发·笔记·嵌入式硬件·学习
小程序设计13 小时前
基于STM32的智慧厨房多参数安全监测与预警系统设计
stm32·嵌入式硬件·安全