全面解析 STM32 八大 GPIO 模式,包括推挽、开漏、复用、浮空、上拉、下拉和模拟输入,附电路原理、寄存器控制和应用场景。
前言:
STM32 存在八大模式,分别如下:
- 推挽输出
- 开漏输出
- 复用推挽输出
- 复用开漏输出
- 浮空输入
- 上拉输入
- 下拉输入
- 模拟输入
STM32 标准 IO 结构图如下:
其中如下电路为保护电路,当大于 VDD-3.3~5v,保护二极管导通,电压被电源吸收,而当电压小于 vss-0v 时,由 GND 吸收,以此来达到保护芯片目的
寄存器就是程序和电路控制单元,我们编写的程序最终能控制电路,主要就是通过寄存器对功能电路开关来实现的
类似于我们常用的 HAL_GPIO_WritePin,内部代码如下
主要通过 BSRR 寄存器实现 GPIO 引脚状态的原子性设置
| 操作类型 | 代码逻辑 | 寄存器行为 | 电平结果 |
|---|---|---|---|
| 置位(高电平) | GPIOx->BSRR = GPIO_Pin | 向 BSRR 低 16 位写入引脚掩码,对应位置 1 | 引脚输出高电平 |
| 复位(低电平) | GPIOx->BSRR = GPIO_Pin << 16u | 向 BSRR 高 16 位写入引脚掩码,对应位置 1 | 引脚输出低电平 |
因此我们的代码主要就是通过控制寄存器的信息来控制单片机的功能
输出驱动器:
输出寄存器的电路图如下,主要是由输出控制,P-MOS 和 N -MOS 控制
通用推挽输出:
推挽输出的核心是 P -MOS 和 N -MOS 管始终处于互补的导通状态,一个导通时,另一个必定截止
其状态对应关系如下表所示:
| 目标输出电平 | “Output Control”逻辑 | P-MOS 管状态 | N-MOS 管状态 | 电流路径 (Drive Strength) |
|---|---|---|---|---|
| 高电平 (1) | 接收到 置位信号 (如 BSRR 低 16 位写 1) | 导通 (开关闭合) | 截止 (开关断开) | V_DD → P-MOS → 输出引脚 。电流从芯片 流出 , 主动驱动 输出为高电平。 |
| 低电平 (0) | 接收到 复位信号 (如 BSRR 高 16 位写 1) | 截止 (开关断开) | 导通 (开关闭合) | 输出引脚 → N-MOS → V_SS (地)。电流从引脚 流入 芯片,主动驱动 输出为低电平。 |
通用推挽输出 (Push-Pull) 特点:
- 强驱动能力:无论在高低电平时,都能主动提供或吸入可观的电流(例如±20mA),直接驱动 LED、蜂鸣器等器件。
- 低阻抗:输出电平稳定,抗干扰能力强。
- 经典应用:数字信号输出、驱动常见外设。
通用推挽输出 (GPIO_MODE_OUTPUT_PP)
继续阅读全文:深入解析 STM32 八大 GPIO 模式:推挽、开漏、上拉、下拉与模拟输入