GPIO接口工作原理
1、What is GPIO ?
GPIO 就是通用输入输出端口,通俗的说就是单片机的一些引脚,可以控制 LED 灯封鸣器,也可以用作按键输入 ADC 采样等,从而实现 stm 32 单片机和外部硬件之间的连接与数据交互。掌握了 GPIO 口,差不多相当于掌握了操作硬件的能力。
STM 32 芯片 GPIO 被分为了很多组,GPIOA,GPIOB 等,每组最多有 16 个引脚从 0- 15。例如 GPIOA 包含 PA 0, PA 1, P A 2 至 PA 15。 GPIOB 包含 PB 0, PB 1, PB 2 至 PB 15。
不同 MCU GPIO 口的引脚数量是不一样的,比如 stm32 f407 IGH6 芯片有GPIOA、 GPIOB、GPIOC 至 GPIOI 9 个 GPIO 组, GPIOA 到 GPIOH 这 8 组每组都是 0 - 15,共 16 个引脚。 GPIOI 组是 0 - 11,共 12 个引脚,所以 stm32 f407 IGH6 总共有 8 * 16 + 12 =140 个引脚。 stm32 f407 IGH6 芯片整体引角数量是 176 + 25, GPIO 引脚就占了一大半。
每组 GPIO 都有一组寄存器与之关联,通过编程读写相关寄存器即可实现对 GPIO 引脚的控制。 GPIO 常用寄存器有四种:配置寄存器、数据寄存器、置位/复位寄存器、复用寄存器实现 GPIO 的输入或输出。配置输出高电平还是低电平以及管脚是否复用等。
2、GPIO的工作原理
GPIO 内部电路结构图如下:
输入电路如下,输入的是外部电路的电平信号。
输出电路如下,输出的是微控制器内部的控制信号。
这里是两个保护二极管,当引脚电压高于 VDD 时,上方的二极管导通输入被钳位置 VDD 左右,当引脚电压低于 VSS 时,下方的二极管导通输入被钳位置 VSS 左右,从而防止过高或过低的电压造成芯片内部电路的损坏。
3、GPIO四种输入模式
GPIO 有四种输入模式:上拉输入、下拉输入、浮空输入、模拟输入。输入电路的内部结构图如下, TTL 施密特触发器可以将模拟信号转化为数字信号。输入数据寄存器可以存储外部输入信号。
3.1 模拟输入
在模拟输入模式下, IO 端口的模拟信号不经过施密特触发器直接输入到片上的模拟外设,比如 ADC 模块。
3.2 上拉、下拉输入
对于输入模式,可以通过设置端口模式寄存器来选择,使用上拉电阻或下拉电阻。
上拉输入模式下,寄存器直接读取 IO 端口的电平, IO 端口为高电平读取的就是高电平, IO 端口为低电平,读取的就是低电平。 IO 端口悬空无信号输入时读取的是高电平。
在下拉输入模式下,寄存器直接读取 IO 端口的电平,但在 IO 端口悬空时读取的是低电平。
3.3 浮空输入
在浮空输入模式下,寄存器直接读取 IO 端口的电瓶,但在 IO 端口悬空时,读取的端口电瓶是不确定的。
3.4 三种输入模式的区别
4、GPIO的四种输出模式
GPIO 有四种输出模式:推挽输出、开漏输出、推挽复用输出、开漏复用输出。
输出时的内部简化结构图如下:
4.1 推挽输出
同一时间只有一个 MOS 管是导通的,PMOS 导通则 NMOS 截止,输出的是高电平。
PMOS 截止则 NMOS 导通,输出的是低电平。
需要注意的是,采用推挽输出时,驱动能力与芯片的 IO 电流特性有关。例如 STM32 F407 IO 端口驱动电流最大 25 mA,端口总驱动小于 240 mA。对大功率外设仍需要外置驱动电路。
4.2 开漏输出
开漏输出的结构如下:
只有一个 NMOS,没有外部上拉电阻时, NMOS 导通输出端口信号被拉低。当 NMOS 截止它的电阻可以看作是无穷大,输出端口是高阻态。
采用开漏输出时,要想输出高电平,需要通过外部上拉电阻提供驱动输出,一般工作在电平不匹配的场合,比如 STM 32 输出的是 3.3 V。那怎么让它输出 5 V 呢?
可以搭建这样一个电路,当 NMOS 截止时,它就会输出 5 V 高电平。它还具有限“线与”的特性,比如当多个开漏输出引脚连接在一块,如果他们都输出高点平,它才能输出高点平。但凡有一个开漏,输出低点平,所有的引脚电压都被这一个拉低了。
4.3 推挽复用输出
推挽复用输出与推挽输出类似,只是推挽复用输出控制源来自片上外设,比如 PWM 、 串口等。
4.4 开漏复用输出
开漏复用输出与开漏输出类似,只是开漏复用输出控制源来自片上外设,比如 IIC 等。