0%

STM32——GPIO工作模式简记

初次接触STM32,对GPIO的工作模式有时一脸懵,在此作个简记。

GPIO工作模式

STM32的GPIO有4种输入模式(浮空输入上拉输入下拉输入模拟输入),4种输出模式(开漏输出复用开漏输出推挽输出复用推挽输出)。

浮空输入

在该模式下,I/O口的电平信号直接进入GPIO端口输入数据寄存器(GPIOx_IDR),MCU直接读取I/O口的电平,I/O口的电平状态完全由外部输入来决定;若该引脚悬空(无信号输入),读取到的电平状态为不确定

上拉输入

I/O口内部接上拉电阻,若引脚悬空或I/O口外部没有信号输入,I/O口默认为高电平;若I/O口输入低电平,则引脚为低电平,MCU读取到的就是低电平。

下拉输入

I/O口内部接下拉电阻,若引脚悬空或I/O口外部没有信号输入,I/O口默认为低电平;若I/O口输入高电平,则引脚就为高电平,MCU读取到的就是高电平。

模拟输入

在该模式下,GPIOx_IDR为空,引脚的上拉/下拉电阻不起作用(即使配置了上拉/下拉模式)。

开漏输出

在该模式下,若控制输出为低电平,I/O口处于低电平状态;若控制输出为高电平,I/O口的电平状态由I/O口外部的上拉/下拉电阻来决定,若无上拉/下拉,I/O口处于悬空状态。

在该模式下,输入可用,可通过GPIOx_IDR读取I/O口的实际状态,I/O口的电平不一定是输出的电平。

复用开漏输出

GPIO复用为其他外设,GPIO端口输出数据寄存器(GPIOx_ODR)无效;输出的高/低电平来源于其它外设,输入可用,可通过GPIOx_IDR获取I/O实际状态,除了输出信号的来源改变外,其它与开漏输出模式功能相同。

推挽输出

在该模式下,若控制输出为低电平,I/O口处于低电平状态;若控制输出为高电平,I/O口处于高电平状态,外部上拉/下拉可控制在没有输出时I/O口的电平。

在该模式下,输入可用,可通过GPIOx_IDR读取I/O口的实际状态,I/O口的电平一定是输出的电平。

复用推挽输出

GPIO复用为其他外设,GPIOx_ODR无效;输出的高/低电平来源于其它外设,输入可用,可通过GPIOx_IDR获取I/O实际状态,除了输出信号的来源改变外,其它与推挽输出模式功能相同。

补充

  • 推挽输出模式可以输出强高/强低电平,连接数字器件;

  • 开漏输出模式可以输出强低电平,需要外接上拉电阻才能实现输出高电平;

  • 任何一种开漏模式,都需要接上拉电阻,否则只能输出低电平。

  • 上拉输入/下拉输入可用于检测外部信号(例如,按键);

  • 开漏输出一般应用于IIC等需要线与功能的总线电路中;

  • 复用开漏输出/复用推挽输出应用于片内外设;

  • STM32的GPIO输出,除了必须用开漏模式的场合,一般都使用推挽模式。