GPIO是什么?
GPIO(General-Purpose input/output):通用输入输出端口的简称。是外设与 微控制器 (STM32等单片机)通
GPIO的8种模式
1 输入模式:
(1)上拉输入模式 GPIO_Mode_IPU
(2)下拉输入模式 GPIO_Mode_IPD
(3)模拟输入模式 GPIO_Mode_AIN
(4)浮空输入模式 GPIO_Mode_IN_FLOATING
2. 输出模式:
(1)推挽输出模式 GPIO_Mode_Out_PP
(2)开漏输出模式 GPIO_Mode_Out_OD
(3)复用推挽输出模式 GPIO_Mode_AF_PP
(4)复用开漏输出模式 GPIO_Mode_AF_OD
3. 最大输出速度:
(1)2MHz GPIO_Speed_2MHz
(2)25MHz GPIO_Speed_25MHz
(3)50MHz GPIO_Speed_50MHz
输入模式
1.浮空输入模式
浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。
2.上拉输入模式
上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在高电平(并且在I/O端口输入为低电平的时候,输入端的电平也是低电平)。STM32的内部上拉是"弱上拉",即通过此上拉输出的电流是很弱的,如要求大电流还是需要外部上拉。
3.下拉输入模式
下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也是高电平。
4.模拟输入模式
模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等。
输出模式
1.开漏输出模式
在开漏输出时,只有N-MOS会参与工作,上方的P-MOS管完全不工作。当输出控制为0(低电平)时,P-MOS管关闭,N-MOS管导通,使得输出GND。当输出控制为1(高电平)时,P-MOS管和N-MOS管全部关闭,引脚既不输出高电平也不输出低电平,此时呈现一个高阻态。正常使用的情况下,必须接一个上拉电阻,若不接上拉电阻,则引脚只能输出低电平。
如果ODR寄存器设置为0,施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。反之如果是1的话读取到的数据并不一定是1,因为是由外部控制。
2.复用输出模式
复用开漏输出和开漏输出本质并没有太大区别,一个输出信号由mcu,一个片上外设。
3.推挽输出模式
推挽输出模式下, P-MOS管和N-MOS管都工作,MCU可以控制输出高电平和低电平。
MCU输出为 0 的时候,N-MOS管导通,I/O引脚输出低电平。
MCU输出为 1 的时候,P-MOS管导通,I/O引脚输出高电平。
在推挽输出时,施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。
4.复用推挽输出模式
原理同推挽输出,区别在于输出写入端连接于片上外设(如串口TX)使其具有其他功能。