莆田做网站公司电话wordpress 制作portfolio
在 STM32 单片机开发中,GPIO(通用输入输出口)是最常用、最基础的功能之一。无论你是控制一个 LED 灯,还是采集传感器数据,GPIO 都扮演着桥梁的角色。
不过,STM32 的 GPIO 并不只有“输入”和“输出”这两种简单的状态。它提供了多达八种不同的配置模式,满足不同应用场景的需求。

STM32 GPIO 配置模式对照表
| 模式名称 | 性质 | 特征描述 | 
|---|---|---|
| 浮空输入 | 数字输入 | 可读取引脚电平,若引脚悬空,则电平不确定 | 
| 上拉输入 | 数字输入 | 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平 | 
| 下拉输入 | 数字输入 | 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平 | 
| 模拟输入 | 模拟输入 | GPIO无效,引脚直接接入内部ADC | 
| 开漏输出 | 数字输出 | 可输出引脚电平,高电平为高阻态,低电平接VSS(地) | 
| 推挽输出 | 数字输出 | 可输出引脚电平,高电平接VDD,低电平接VSS | 
| 复用开漏输出 | 数字输出 | 由片上外设控制,高电平为高阻态,低电平接VSS | 
| 复用推挽输出 | 数字输出 | 由片上外设控制,高电平接VDD,低电平接VSS | 
一、模拟输入模式(Analog Input)
模式名:_AIN
类型:输入
适合:读取模拟信号(非0/1)
这种模式下,引脚连接到 ADC(模数转换器)模块,专门用来读取外部传感器的模拟电压值。因为模拟信号是连续的电压(如1.8V、2.4V),而不是0或1,所以它不会进入数字输入寄存器。
特点:
- 用于电压检测、传感器读取
 - 无法读取为0或1
 - 功耗较低,适合低功耗模式
 
常见应用:
- 电池电压采集
 - 光敏/温度传感器
 - 电位器读取
 
二、浮空输入模式(Floating Input)
模式名:_IN_FLOATING
类型:输入
适合:外部驱动信号完全决定电平
浮空输入就像是“放空”的状态,内部没有任何上拉或下拉电阻,完全依赖外部输入。如果没有外部驱动,它就会处于不稳定的漂浮状态,容易受干扰。
特点:
- 悬空时电平不确定
 - 响应灵敏,但易受干扰
 
常见应用:
- 串口RX接收脚
 - 外设输入端口(有固定电平输出的设备)
 
三、上拉输入模式(Input Pull-Up)
模式名:_IPU
类型:输入
适合:需要默认高电平的输入检测
该模式内部通过上拉电阻把引脚默认拉到高电平,当外部接地或按键按下后,电平变为低。这就避免了引脚悬空带来的不确定性。
特点:
- 默认电平为高
 - 不需要外接上拉电阻
 
常见应用:
- 按键检测(接地触发)
 - 控制信号输入(高电平空闲)
 
四、下拉输入模式(Input Pull-Down)
模式名:_IPD
类型:输入
适合:需要默认低电平的输入检测
与上拉相反,该模式默认电平为低电平,外部拉高才会被识别。
特点:
- 默认电平为低
 - 避免误触发逻辑高
 
常见应用:
- 反接按键输入
 - 需要低电平空闲的输入
 
五、开漏输出模式(Open-Drain Output)
模式名:_OUT_OD
类型:输出
适合:总线共享、双向通信
开漏输出就像是一个只能接地的开关。它能输出低电平,但高电平需要外部加一个上拉电阻“拉起来”。在多个设备共用一根线的场合,开漏是最佳选择。
特点:
- 只能主动输出低电平
 - 需要外部上拉电阻才能输出高电平
 - 支持“线与逻辑”——多个设备并联控制同一线
 
常见应用:
- I2C通信(SCL、SDA)
 - 总线合并/仲裁
 - 双向I/O(模拟C51口)
 
六、推挽输出模式(Push-Pull Output)
模式名:_OUT_PP
类型:输出
适合:驱动数字器件、控制外设
推挽输出内部有两个晶体管,能直接输出高或低电平。切换速度快,驱动能力强,是最常见的输出模式。
特点:
- 主动输出高/低电平
 - 能驱动负载(如LED、继电器)
 - 电平切换速度快
 
常见应用:
- 点亮LED灯
 - 控制蜂鸣器、电机
 - 向外输出数据(SPI、PWM等)
 
七、复用开漏输出模式(Alternate Function Open-Drain)
模式名:_AF_OD
类型:外设复用
适合:I2C总线通信等外设功能
这是开漏输出的变种,适用于外设控制时,比如I2C通信线。STM32内部将GPIO复用给某个外设,同时保持开漏特性。
特点:
- 由外设控制GPIO行为
 - 仍然需要外部上拉电阻
 
常见应用:
- I2C总线SCL、SDA引脚
 
八、复用推挽输出模式(Alternate Function Push-Pull)
模式名:_AF_PP
类型:外设复用
适合:高速通信输出
和上面类似,只不过这次的输出方式是推挽。适合速度要求高、信号完整性要求强的外设输出,比如UART、SPI等。
特点:
- 外设主控,GPIO为输出端
 - 可输出清晰的高低电平
 
常见应用:
- SPI总线(SCK、MOSI)
 - UART的TX脚
 - PWM输出控制
 
总结对比一览表
| 模式名称 | 输入/输出 | 默认电平 | 是否需外接电阻 | 适用场景 | 
|---|---|---|---|---|
| 模拟输入 | 输入 | 无 | 否 | 采集模拟电压,如ADC | 
| 浮空输入 | 输入 | 不确定 | 否 | 外部驱动明确的输入 | 
| 上拉输入 | 输入 | 高 | 否(内部上拉) | 按键、默认高状态 | 
| 下拉输入 | 输入 | 低 | 否(内部下拉) | 按键、默认低状态 | 
| 开漏输出 | 输出 | 悬空/低 | 是 | I2C通信、多设备共线 | 
| 推挽输出 | 输出 | 高/低 | 否 | 控制LED、蜂鸣器、继电器 | 
| 复用开漏输出 | 外设输出 | 悬空/低 | 是 | I2C接口、开漏功能外设 | 
| 复用推挽输出 | 外设输出 | 高/低 | 否 | SPI/UART等高速接口 | 
如何选择GPIO模式?
- 要采集传感器的模拟信号 → 模拟输入
 - 接按键/开关等外部控制 → 上拉输入或下拉输入
 - 输出控制信号给LED、继电器 → 推挽输出
 - 多个模块共用一根信号线 → 开漏输出
 - 用作I2C、SPI、UART通信 → 使用对应的复用模式(AF_OD / AF_PP)
 
小结
STM32 GPIO 的强大之处就在于它的灵活性。不同的配置方式对应不同的电气行为和通信需求。理解这些模式的区别和用途,是STM32开发路上必须掌握的一项基础技能。
