文章目录
- [1. GPIO 简介](#1. GPIO 简介)
- [2. 相关术语](#2. 相关术语)
- [3. N-MOS 与 P-MOS](#3. N-MOS 与 P-MOS)
- [4. STM32 的 GPIO](#4. STM32 的 GPIO)
-
- [4.1 浮空输入](#4.1 浮空输入)
- [4.2 上拉输入](#4.2 上拉输入)
- [4.3 下拉输入](#4.3 下拉输入)
- [4.4 模拟输入](#4.4 模拟输入)
- [4.5 开漏输出](#4.5 开漏输出)
- [4.6 推挽输出](#4.6 推挽输出)
- [4.7 复用开漏输出](#4.7 复用开漏输出)
- 4.8复用推挽输出
1. GPIO 简介
- GPIO 是通用输入输出端口(General Purpose Input/Output)的简称,简单来说就是芯片可控制的引脚,芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部的通讯、控制以及数据采集等功能。
- GPIO 最基本的输出功能是由芯片控制引脚输出高、低电平,实现开关控制,如把 GPIO 引脚接入到 LED 灯,就能控制 LED 灯的亮灭。最基本的输入功能是检测外部输入电平,如把 GPIO 引脚连接到按键,通过电平高低区分按键是否被按下。
2. 相关术语
- 灌电流:电流由芯片流向外设,叫灌电流,也称为推。
- 拉电流:电流由外设流向芯片,叫拉电流,也称为挽。
- 高阻态:引脚既不输出高电平也不输出低电平,称为高阻态。
3. N-MOS 与 P-MOS
- MOS 管的管脚有三个:源极 S(Source)、栅极 G(Gate)和漏极 D(Drain)。
- MOS 管有两种:一种是 PMOS 管,即 Positive,另一种是 NMOS 管,即 Negative。所谓积极的管就是顺应潮流,消极的管就是违背趋势。显然,电流从源极到漏极,就是顺应潮流,因为源极就是源头,因此这种管就是 PMOS 管。而电流从漏极到源极,就是逆流而上,就是 NMOS 管。

- 如何区分 N 沟道 MOS 还是 P 沟道 MOS,以及寄生二极管的方向?
- 箭头指向 G 极的是 N 沟道,箭头背向 G 极的是 P 沟道。
- 不论 N 沟道还是 P 沟道,箭头方向和寄生二极管的方向总是一致的,要么都由 S 指向 D,要么都由 D 指向 S。
- MOS 管的导通方式:
- N-MOS 管的漏极 D 接正极,源极 S 接负极,栅极 G 为正电压时 MOS 管开始工作。
- P-MOS 管的源极 S 接正极,栅极 G 为负电压时 MOS 管开始工作。
4. STM32 的 GPIO
- 下图为 STM32 的 GPIO 硬件结构框图,可以从整体上了解 GPIO 外设及它的各种应用模式。该图从最右端看起,最右端就是 STM32 芯片引出的 GPIO 引脚,其余部件都位于芯片内部。

1. 保护二极管
- 图中①处共有两个保护二极管,分别接 VDD 与 VSS,其作用为保护引脚外部过高或过低的电压输入。当引脚的输入电压高于 VDD 时,上方的二极管导通。当引脚的输入电压低于 VSS 时,下面的二极管导通,从而使输入芯片内部的电压始终处于比较稳定的范围。
- 虽然有二极管保护,但这样的保护却很有限,大电压、大电流的接入依然很容易烧坏芯片。
- 在绝大多数现代数字电路中,VDD = 正电源(如 +3.3V、+5V),VSS = 0V(GND,接地)。

2. 上拉、下拉电阻
- 上拉、下拉电阻的作用是当对应的 IO 口没有输入时,该引脚的电平由上拉、下拉电阻决定。电阻阻值大概在 30~50K 欧之间,可以通过上下两个开关控制,这两个开关由寄存器控制。
- 开启内部上拉电阻工作,引脚电平为高,开启内部下拉电阻工作, 引脚电平为低。如果都不开启,引脚处于浮空状态,电平不确定。

3. 施密特触发器
- 施密特触发器可以理解为一种整形电路,它可以将非标准方波整形成方波。当输入电压高于正向阈值电压时,转换为高电平。当输入电压低于负向阈值电压时,转换为低电平。

4.1 浮空输入
- 工作特点:
- 上拉/下拉电阻为断开状态。
- 施密特触发器打开。
- 禁止引脚输出。
- 浮空输入模式下,IO 口的输入电平完全由外部引脚电路决定,如果外部输入低电平,则输入数据寄存器的值为 0,反之则为 1。如果 IO 引脚没有连接其他外部设备,那么检测到的输入电平是不确定的。

4.2 上拉输入
- 工作特点:
- 上拉电阻导通。
- 施密特触发器打开。
- 禁止引脚输出。
- 上拉输入模式下,当外部引脚输入为高电平时,输入数据寄存器读取为高电平。外部引脚为低电平时,读取为低电平。若 IO 引脚没有连接其他设备,那么输入电平将由上拉电阻拉至高电平。

4.3 下拉输入
- 工作特点:
- 下拉电阻导通。
- 施密特触发器打开。
- 禁止引脚输出。
- 下拉输入模式下,当外部引脚输入为高电平时,输入数据寄存器读取为高电平。外部引脚为低电平时,读取为低电平。如果 IO 引脚没有连接其他设备,那么输入电平将由下拉电阻拉至低电平。

4.4 模拟输入
- 工作特点:
- 上、下拉电阻断开。
- 不经过施密特触发器。
- 禁止引脚输出。
- 该模式下输入信号是不经过施密特触发器的,因为信号经过施密特触发器后只有 0、1 两种状态,若 ADC 外设要采集原始的模拟信号,信号源输入必须在施密特触发器之前。

4.5 开漏输出
- 工作特点:
- P- MOS 管关闭、N-MOS管打开。
- 由于 P-MOS 管关闭,因此 IO 引脚的输出状态取决于 N-MOS 管的导通状况, N-MOS 管受控制于输出数据寄存器。
- 当输出数据寄存器输出 0 时,经过输出控制的取反操作后,输出逻辑 1 到 N-MOS 管的栅极,这时 N-MOS 管导通, 使得 IO 引脚连接到 VSS,即输出低电平。
- 如果输出数据寄存器的值为 1,经过输出控制的取反操作后,输出逻辑 0 到 N-MOS 管的栅极,这时 N-MOS 管截止,又因为 P-MOS 管一直是截止的,使得 IO 引脚呈现高阻态,即既不输出低电平,也不输出高电平。
- 所以开漏输出模式下,引脚只能输出低电平或呈现高阻抗状态。

4.6 推挽输出
- 工作特点:
· P-MOS 管打开、N-MOS管打开。 - 由于 P-MOS 管与 N-MOS 管都打开,故引脚可输出低电平 VSS 或者高电平 VDD。
- 当输出数据寄存器的值为 0 时,经过输出控制取反操作后,输出逻辑 1 到 P-MOS 管的栅极,这时 P-MOS 管就会截止,同时逻辑 1 也会输出到 N-MOS 管的栅极,这时 N-MOS 管就会导通,使得 IO 引脚接到 VSS,即输出低电平。
- 当输出数据寄存器的值为 1 时,经过输出控制取反操作后,输出逻辑 0 到 N-MOS 管的栅极,这时 N-MOS 管就会截止,同时逻辑 0 也会输出到 P-MOS 管的栅极,这时 P-MOS 管就会导通,使得 IO 引脚接到 VDD,即输出高电平。

4.7 复用开漏输出
- IO 引脚的复用是指单个物理引脚可以通过软件配置选择性地执行多种不同的功能,这是现代微控制器(MCU)为节省芯片面积、提高灵活性而采用的关键设计。
- 为什么需要复用?
- 物理限制:芯片封装的引脚数量有限(如 48 脚、100 脚封装)。
- 功能丰富:MCU 需要支持大量外设(UART、SPI、I2C、PWM、ADC 等)。
- 成本优化:避免为每种功能单独分配引脚,减小芯片尺寸和成本。
- 工作原理:
- 每个引脚连接到多路选择器(MUX),通过配置复用功能寄存器切换功能。
- 复用开漏输出的工作特点:
- P- MOS 管关闭、N-MOS管打开。
- 复用开漏输出是指引脚配置为外设功能(复用模式)引脚的同时,其输出结构采用开漏电路。如下图,流向输出控制的逻辑电平不再是来自输出数据寄存器,而是外设的复用输出。

4.8复用推挽输出
- 工作特点:
- P- MOS 管打开、N-MOS管打开。

- P- MOS 管打开、N-MOS管打开。