一文带你搞懂有关于 GPIO 的一切

GPIO

1. 什么是 GPIO ?

GPIO(General Purpose Input/Output)是通用输入输出引脚的缩写,是嵌入式系统中非常重要的基本硬件资源之一。

芯片上大部分引脚都是 GPIO引脚,作为这类引脚,它的功能和特点是可以被编程控制它的工作模式,也可以编程控制它的电压高低等 1

GPIO 可以用于控制 LED 灯、蜂鸣器,也可以用作按键输入、ADC 采样,从而实现单片机与外部硬件之间的连接与数据交互2

图1:ESP32 开发板引脚示意图

2. GPIO 内部电路结构

每个 GPIO 内部的电路结构,如图2所示。上方是输入电路,输入的是外部电路的电平信号;下方是输出电路,输出的是微控制器内部的控制信号。2

  • 保护二极管:IO 引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于 VDD 时,上方的二极管导通;当引脚电压低于 VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。

VDD 通常指的是正电源电压或者是芯片的工作电压,对于 ESP32 来说,VDD = 3.3V
VSS 通常指的是地(GND),也就是电路中的零点压参考点。

  • P-MOS 管和 N-MOS 管:由 P-MOS 管和 N-MOS 管组成的单元电路使得 GPIO 具有“推挽输出”和“开漏输出”的模式。
  • TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。但是,当 GPIO 引脚作为 ADC 采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行 TTL 电平转换。ADC 外设要采集到的原始的模拟信号。3

图2:GPIO 内部电路结构图

3. GPIO 的工作模式

GPIO 一共有8种模式:上拉输入、下拉输入、浮空输入、模拟输入、推挽输出、开漏输出、复用推挽输出、复用开漏输出。

3.1. 输入3

  • GPIO 的输入模式有4种:上拉输入、下拉输入、浮空输入、模拟输入。
  • 上拉输入和下拉输入顾名思义,分别是连接了上拉电阻和下拉电阻的输入模式。上拉输入在引脚没有数据输入的情况下默认为高电平,下拉输入在引脚没有信号的情况下默认为低电平。
  • 既没有连接上拉电阻、也没有下拉电阻,就是浮空输入。浮空输入在引脚悬空的情况下电平是不确定的,可能是高电平也可能是低电平。
  • 模拟输入中外部信号并没有经过模拟信号向数字信号的转换过程,传递的是模拟信号。
3.1.1. 浮空输入

对于浮空输入而言,IO 端口的电平信号直接进入输入数据寄存器,其电平状态完全由外部输入决定。
如果在引脚悬空(无信号输入)的情况下,该端口的电平是不确定的。

图3:GPIO 浮空输入模式
3.1.2. 上拉输入

对于上拉输入而言,IO 端口的电平信号直接进入输入数据寄存器。
如果在引脚悬空(无信号输入)的情况下,该端口的电平为高电平。

通过在 GPIO 引脚和电源(VDD)之间连接一个电阻,可以确保在没有外部信号驱动时,引脚被“拉”到高电平。这个电阻称为上拉电阻。

图4:GPIO 上拉输入模式
3.1.3. 下拉输入

对于下拉输入而言,IO 端口的电平信号直接进入输入数据寄存器。
如果在引脚悬空(无信号输入)的情况下,该端口的电平为低电平。

通过在 GPIO 引脚和地(GND 或 VSS)之间连接一个电阻,可以确保在没有外部信号驱动时,引脚被“拉”到低电平。这个电阻称为下拉电阻。

图5:GPIO 下拉输入模式
3.1.4. 模拟输入

模拟输入模式下,IO 端口的模拟信号(电压信号,而非电平信号)不经过 TTL 施密特触发器2,直接输入到片上外设模块,比如 ADC 模块等。

图6:GPIO 模拟输入模式

3.2. 输出4

  • GPIO 的输出模式有4种:通用推挽输出、通用开漏输出、复用推挽输出、复用开漏输出。观察一下我们可以发现,只要掌握推挽和开漏、通用和复用之间的区别,就可以掌握所有的输出模式。

图7:GPIO 输出模式分类
3.2.1. 推挽和开漏之间的区别

回顾一下 图2:GPIO 内部电路结构图,重点关注输出驱动器部分,有一对 MOS 管,我们把这部分放大,可以得到图8。

图8:GPIO 输出驱动器中的一对 MOS 管

上面的 MOS管 为 P-MOS,下面的 MOS 管为 N-MOS,P-MOS 的漏极接高电压 Vdd,N-MOS 的源极接低电压 Vss,两个 MOS 管之间有一条导线连接到 IO 引脚。

  • 推挽输出模式下,一对 MOS 管交替导通:上面的导通,下面的就关断;下面的导通,上面的就关断

  • 向 IO 写 0,P-MOS 关断,N-MOS 导通,引脚通过下方的 N-MOS 与 Vss 相连,输出低电压

  • 向 IO 写 1,P-MOS 导通,N-MOS 关断,引脚通过上方的 P-MOS 与 Vdd 相连,输出高电压

  • 开漏输出模式下,P-MOS 一直处于关断状态

  • 向 IO 写 0,P-MOS 恒断,N-MOS 导通,引脚通过下方的 N-MOS 与 Vss 相连,输出低电压

  • 向 IO 写 1,P-MOS 恒断,N-MOS 关断,引脚处于悬空状态,无论引脚侧电压有多大,电流恒为 0,根据欧姆定律,此时电阻无穷大。这种状态被称为高阻抗

图9:推挽和开漏输出模式总结

总结:

  • 推挽模式下,一对 MOS 管交替导通,对外输出低电压或高电平
  • 开漏模式下,P-MOS保持关断,对外输出低电平或高阻抗
3.2.2. 通用和复用之间的区别
  • 通用:直接控制 IO 引脚输出电压的方式
  • 复用:把 IO 引脚控制权交由其他模式托管,比如串口模块、定时器模块等。

4.1 中也有对于复用的相关描述

3.2.3. 输出模式的选择3
  • 推挽输出可以输出低电平和高电平两种状态,可以用于驱动 LED、蜂鸣器等外设。
  • 开漏输出只能输出低电平,高电平输出依赖外部的上拉电阻实现,输出电平完全由上拉电阻所连接的电源电平决定
    • 这一特性使其可以很方便地调节输出电平,适用于需要电平转换的场景,
    • 也使其可以实现“线与”功能

所谓的“线与”指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。

4. IO 复用和复用功能重映射5

4.1. 什么是 IO 复用?

观察电脑的键盘,我们会发现上面的按键几乎都具有不止一个功能,比如用于输入数字 1 的按键也可以用于输入 !,用于输入数字 2 的按键也可以用于输入 @ ,单片机的引脚与键盘上的按键类似,几乎每个都具有不止一个功能。

默认情况下,我们可以直接通过程序控制 IO 引脚输出高电平或者低电平,**这种直接控制引脚的方式就是通用功能,而相对的其他功能,就是复用功能。_回看一下_图1:ESP32 开发板引脚示意图,其中彩色的标识,就是对应引脚所具有的复用功能。

总结一下,IO 复用就是指同一个 IO 引脚具备多个不同的功能。

4.2. 什么是复用功能重映射?

一般单个引脚可以同时兼具多种复用功能,以 STM32F103C8T6 为例,它的 PA9 引脚既可以作为 定时器1 的 通道2 来使用,也可以作为 串口1 的 TX 引脚来使用。如果我们想要同时使用 串口1 和 定时器1 该怎么办呢? 为了解决这个问题,芯片上给大多数模块都留有一组或多组备用引脚。对于 USART1 来说,备用引脚为 PB6 和 PB7,我们只要将 USART1 重映射到这两个引脚,冲突问题就解决了。

所谓的复用功能重映射,就是将冲突的复用功能移动到其他备用引脚上去。

图10:STM32F103C8T6 TIM1 和 USART1 模块占用引脚示意图

  1. 【每日精选】嵌入式055.GPIO是什么意思 - B站 - 朱有鹏 ↩︎

  2. 8分钟动画视频带你直观了解STM32 GPIO接口工作原理,内容很干!GPIO是什么?能用来做什么?八种工作模式,推挽输出和开漏输出的区别 - B站 - 小元实验室 ↩︎ ↩︎ ↩︎

  3. 一文看懂GPIO口的八种工作原理 - CSDN - 爱学习的王大胖子 ↩︎ ↩︎ ↩︎

  4. [STM32 HAL库] [GPIO] 4种输出模式,最佳教程,没有之一 - B站 - 铁头山羊 ↩︎

  5. [STM32 HAL库] [GPIO] IO 复用和重映射,最佳教程,没有之一~ - B站 - 铁头山羊 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值