1.GPIO的八种工作模式

STM32的GPIO引脚内部结构复杂,但可以简化为输入和输出两条路径。八种模式正是通过配置内部的上/下拉电阻、TTL施密特触发器以及输出MOS管电路来实现的。

模式 类型 核心原理 典型应用
GPIO_Mode_AIN 模拟输入 断开TTL触发器,信号直接连接ADC外设。 模拟量读取(如电压采集)。
GPIO_Mode_IN_FLOATING 浮空输入 上/下拉电阻断开,电平完全由外部信号决定。 电平不确定,适合高阻抗信号或已外部上拉的信号(如UART RX)。
GPIO_Mode_IPD 下拉输入 内部下拉电阻接通,引脚悬空时读取为低电平(0)。 默认低电平有效的输入(如接VCC的按键)。
GPIO_Mode_IPU 上拉输入 内部上拉电阻接通,引脚悬空时读取为高电平(1)。 默认高电平有效的输入(如接GND的按键)。
GPIO_Mode_Out_PP 推挽输出 高低电平均有驱动能力,可直接输出0或3.3V。 控制LED、蜂鸣器等数字器件。
GPIO_Mode_Out_OD 开漏输出 仅低电平有驱动能力,高电平为高阻态,需外接上拉电阻。
输出低电平(0):开关闭合,引脚被内部MOS管强行拉到0V。这个能力很强,能吸纳电流(灌电流)。
输出高电平(1):开关断开,引脚内部相当于悬空(高阻态),它自己既不能输出3.3V,也不能输出5V。引脚的实际电压完全由外部电路决定。
I2C总线(实现多设备线与)、电平匹配(如输出5V高电平,将GPIO配置为开漏输出,然后将上拉电阻的另一端接在5V电源上)。IIC一般不使用芯片内部的电阻是因其内部电阻的阻值固定,使用外部的电阻可以做速率、功耗平衡。
GPIO_Mode_AF_PP 复用推挽输出 引脚的控制权交给片上外设(如TIM、USART)。 PWM输出、SPI通信。
GPIO_Mode_AF_OD 复用开漏输出 同上,但为开漏结构。 I2C、SMBUS等需要线与功能的总线。
模式 内部结构 高电平实现 核心优势 典型应用
推挽输出 两个MOS管(一上一下) 自身驱动输出3.3V 输出能力强,高低电平切换快 控制LED、蜂鸣器,SPI通信
开漏输出 只有一个下拉MOS管 必须外接上拉电阻 实现“线与”功能,可灵活匹配不同电压 ​I2C总线​,电平转换

如何选择?

  • 点灯:推挽输出,电流驱动能力强。
  • ​读按键​:推荐​上拉输入​。因为按键通常一端接地,另一端接GPIO,内部上拉可让未按下时电平稳定为高,按下时被拉低,逻辑清晰且无需外部电阻。
  • ​通信​:I2C用开漏(复用),SPI用推挽(复用)。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐