1、GPIO的全称是General-purpose input/output,意为通用输入/输出接口,PIN脚依现实考量可选择通用输入模式(GPI)通用输出模式(GPO)以及通用输入输出模式(GPIO),在STM32中,GPIO的工作模式被细分为8种,由4个32位寄存器共同控制。
2、GPIO端口的硬件结构框图如下图所示:
需要注意的是:在下文中并不会对GPIO各个工作模式电路的工作原理进行详细解析,而是着重分析各个模式的特点和在不同场合下的具体应用。
3、GPIO的结构决定了GPIO可以被配置成以下模式:
typedef enum
{
GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
} GPIOMode_TypeDef;
4、4种输入模式
- 浮空输入模式:数据通道中仅接入TTL触发器(作用是将相对缓慢变化的模拟信号变成矩形信号)整形,随后输入输入数据寄存器,该种工作模式未接入任何上拉/下拉电阻。 模式特点:在该引脚悬空(无信号输入)的情况下,读取该端口的电平是不确定的。 适用场合:外部按键输入/USART RX引脚。
- 上拉输入模式:与浮空输入模式相比,仅仅是在数据通道前端接入了一个上拉电阻,其余无变化。 模式特点:在无信号输入时端口电位受上拉电阻钳制,I/O端口输入电平始终保持为高电平;而当端口输入电平为低电平时,I/O端口输入电平为低电平。 适用场合:需要IO内部上拉电阻输入时,器件的外部中断(IRQ)引脚触发中断条件为下降沿触发/低电平触发,这样在无信号输入时始终保持高电平,如果有事件触发中断IRQ可以输出一个低电平,进而可产生(下降沿/低电平)中断。例如单片无线收发器芯片NRF24L01的IRQ引脚的工作模式即为上拉输入模式。
- 下拉输入模式:与浮空输入模式相比,仅仅是在数据通道前端接入了一个下拉电阻,其余无变化。 模式特点:在无信号输入时端口电位受下拉电阻钳制,I/O端口输入电平始终保持为低电平;而当端口输入电平为高电平时,I/O端口输入电平为高电平。 适用场合:需要IO内部下拉电阻输入时,器件的外部中断(IRQ)引脚触发中断条件为上升沿触发/高电平触发时,该端口可以选择下拉输入模式。
- 模拟输入模式:数据通道不接入任何处理单元(TTL触发器/钳制电阻),直接输入MCU内部的处理单元。 模式特点:相较于其他输入模式只能读取到逻辑高/低电平(数字量),该模式能读取到细微变化的值(模拟量)。 适用场合:ADC模拟输入/低功耗下省电。
5、4种输出模式
- 推挽输出:输出具有驱动能力,当CPU输出逻辑’0’时,I/O端口输出低电平,而当CPU输出逻辑’1’时,I/O端口输出高电平,通常作为普通的GPIO用于驱动LED、数码管等电子元器件或输出控制某个信号。
- 开漏输出:适合做电流型的驱动,其吸收电流能力较强。当CPU输出逻辑’0’时,I/O端口输出低电平,而当CPU输出逻辑’1’时,该引脚处于开漏,也就是浮空状态(高阻态),如果想输出高电平则必须接入上拉电阻。同时IO,口可以由外部电路改变为低电平或不变,即可读IO输入电平变化,实现了I/O端口的双向功能;此外,可以将多路开漏输出的引脚连接到一条线上,通过一个上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,这也是I2C,SMBus,等总线判断总线占用状态的原理。
- 复用推挽输出:在STM32中,一个引脚通常可作为普通GPIO来使用,但通常有多个复用模块对应着同一个引脚,那么当这个GPIO作为内置外设引脚时,就叫做复用模式。 适用场合:常见片内外设(USART TX引脚/SPI/PWM输出等等)
- 复用开漏输出:与开漏输出特性一致,只不过引脚选择了复用功能。 适用场合:常见片内外设(I2C/SMBus等等)
注意事项:当GPIO引脚的主功能为驱动片上外设(如I2C)时,此时也可选择对应推挽/开漏输出模式而不启用复用引脚功能。此外如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。
|