STM32 GPIO 中8种配置模式
在 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开发路上必须掌握的一项基础技能。