GPIO(英语:General-purpose input/output),通用型之输入输出的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚,所有的GPIO引脚都有基本的输入输出功能。
最基本的输出功能是由STM32控制引脚输出高、低电平,实现开关控制,如把GPIO引脚接入LED灯,那就可以控制LED灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。
最基本的输入功能是检测外部电平,如把GPIO引脚连接到按键,通过电平高低区分按键是否被按下。
4种输入模式
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_AIN 模拟输入
4种输出模式
GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
3种最大输出速度
2MHZ
10MHZ
50MHZ
三、GPIO框图剖析我们所用到的每一个GPIO其内部结构都是这样,分别对应着GPIO的八种模式 这里我们简单的介绍下:
保护二极管: IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入,当引脚电压高于VDD_FT时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁
上拉、下拉电阻(输入驱动器中):控制引脚默认状态的电压,开启上拉的时候引脚默认电压为高电平,开启下拉的时候引脚默认电压为低电平
TTL施密特触发器(输入驱动器中):基本原理是当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;IO口信号经过触发器后,模拟信号转化为0和1的数字信号 也就是高低电平 并且是TTL电平协议 这也是为什么STM32是TTL电平协议的原因
P-MOS管和N-MOS管(输出寄存器中):信号由P-MOS管和N-MOS管,依据两个MOS管的工作方式,使得GPIO具有“推挽输出”和“开漏输出”的模式
P-MOS管高电平导通,低电平关闭,下方的N-MOS低电平导通,高电平关闭
注意: VDD_FT 代表IO口,兼容3.3V和5V,如果没有标注“FT”,就代表着只支持3.3V 。在芯片手册中可以查看支持5V的引脚:
浮空输入模式
注意:浮空输入模式下,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的
上拉输入模式
注意:上拉输入模式下,IO口默认为高电平
下拉输入模式
注意:下拉输入模式下,IO口默认为低电平
模拟输入模式
注意:模拟输入模式下,信号不经过施密特触发器,直接直接进入ADC模块,所以CPU不能读取输入寄存器上的引脚状态。除了ADC和DAC要将 IO 配置为模拟通道之外其他外设功能一律 要配置为用功能模式。
开漏输出模式
注意:在开漏输出模式时,只有N-MOS管工作,如果我们控制输出为0,则P-MOS管关闭,N-MOS管导通,使输出低电平,若控制输出为1时,则P-MOS管和N-MOS管都关闭,输出指令就不会起到作用而是由I/O端口外部的上拉或者下拉决定,如果没有上拉或者下拉 IO口就处于悬空状态。