技术编程|STM32的GPIO详细介绍


STM32 的 GPIO 介绍STM32 引脚说明
GPIO 是通用输入 / 输出端口的简称 , 是 STM32 可控制的引脚 。 GPIO 的引脚与外部硬件设备连接 , 可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能 。
STM32F103ZET6 芯片为 144 脚芯片 , 包括 7 个通用目的的输入 / 输出口(GPIO)组 , 分别为 GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG , 同时每组 GPIO 口组有 16 个 GPIO 口 。 通常简略称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx , 其中 x 为 0-15 。
STM32 的大部分引脚除了当 GPIO 使用之外 , 还可以复用位外设功能引脚(比如串口) , 这部分在【STM32】STM32 端口复用和重映射(AFIO 辅助功能时钟) 中有详细的介绍 。
GPIO 基本结构
每个 GPIO 内部都有这样的一个电路结构 , 这个结构在本文下面会具体介绍 。

技术编程|STM32的GPIO详细介绍
本文插图

这边的电路图稍微提一下:
保护二极管:IO 引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入 。 当引脚电压高于 VDD 时 , 上方的二极管导通;当引脚电压低于 VSS 时 , 下方的二极管导通 , 防止不正常电压引入芯片导致芯片烧毁 。 但是尽管如此 , 还是不能直接外接大功率器件 , 须加大功率及隔离电路驱动 , 防止烧坏芯片或者外接器件无法正常工作 。
P-MOS 管和 N-MOS 管:由 P-MOS 管和 N-MOS 管组成的单元电路使得 GPIO 具有“推挽输出”和“开漏输出”的模式 。 这里的电路会在下面很详细地分析到 。
TTL 肖特基触发器:信号经过触发器后 , 模拟信号转化为 0 和 1 的数字信号 。 但是 , 当 GPIO 引脚作为 ADC 采集电压的输入通道时 , 用其“模拟输入”功能 , 此时信号不再经过触发器进行 TTL 电平转换 。 ADC 外设要采集到的原始的模拟信号 。
这里需要注意的是 , 在查看《STM32 中文参考手册 V10》中的 GPIO 的表格时 , 会看到有“FT”一列 , 这代表着这个 GPIO 口时兼容 3.3V 和 5V 的;如果没有标注“FT” , 就代表着不兼容 5V 。
STM32 的 GPIO 工作方式
GPIO 支持 4 种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)和 4 种输出模式(开漏输出、开漏复用输出、推挽输出、推挽复用输出) 。 同时 , GPIO 还支持三种最大翻转速度(2MHz、10MHz、50MHz) 。
每个 I/O 口可以自由编程 , 但 I/O 口寄存器必须按 32 位字被访问 。
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
下面将具体介绍 GPIO 的这八种工作方式:
浮空输入模式

技术编程|STM32的GPIO详细介绍
本文插图

浮空输入模式下 , I/O 端口的电平信号直接进入输入数据寄存器 。 也就是说 , I/O 的电平状态是不确定的 , 完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下 , 读取该端口的电平是不确定的 。
上拉输入模式

技术编程|STM32的GPIO详细介绍
本文插图

上拉输入模式下 , I/O 端口的电平信号直接进入输入数据寄存器 。 但是在 I/O 端口悬空(在无信号输入)的情况下 , 输入端的电平可以保持在高电平;并且在 I/O 端口输入为低电平的时候 , 输入端的电平也还是低电平 。
下拉输入模式

技术编程|STM32的GPIO详细介绍


推荐阅读