1.I/O的基本结构

1.1肖特基触发器的作用
在STM32等微控制器的GPIO引脚内部,通常会集成一个肖特基触发器,其核心作用是对输入信号进行整形和噪声抑制,确保数字逻辑的稳定性和可靠性。以下是它的具体功能和应用场景:
1.1.1信号整形(消除噪声与抖动)
问题:外部输入的信号可能因噪声、抖动或缓慢变化(如按键、传感器输出)导致电压波动,直接读取会产生误判。
解决方案:肖特基触发器通过滞回特性(Hysteresis),只有当输入电压超过高阈值(VT+VT+)或低于低阈值(VT−VT−)时,输出才会跳变,中间波动被忽略。
1.1.2 提高抗干扰能力
滞回电压(VH=VT+−VT−),例如,STM32的GPIO输入可能设定 VT+=2.0V、VT−=1.8V,则:
输入电压 > 2.0V → 逻辑1
输入电压 < 1.8V → 逻辑0
1.8V~2.0V之间 → 保持原状态(避免噪声误触发)。
注意:模拟输入模式(如ADC)会绕过肖特基触发器,直接读取引脚电压。
1.2内部弱上/下拉电阻
所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。
1.3保护二极管
引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入,当引脚电压高于VDD时,上 方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。
1.4P-MOS管和N-MOS管
2.GPIO模式

根据数据手册总结一下,也就是说GPIO模式可以分为三类:输出、复用、输入。
2.1 输入模式
模式 | 特性 | 典型应用 |
---|---|---|
输入浮空 | 引脚电平完全由外部电路决定,无内部上拉/下拉 | 外部信号读取(如UART RX) |
输入上拉 | 内部上拉电阻(约40kΩ)默认拉高,外部低电平时生效 | 按键检测(按下接地) |
输入下拉 | 内部下拉电阻(约40kΩ)默认拉低,外部高电平时生效 | 按键检测(按下接VCC) |
2.2 输出模式
模式 | 特性 | 典型应用 |
---|---|---|
推挽输出 | 可输出高/低电平,驱动能力强(直接拉高或拉低) | LED控制、驱动数字器件 |
开漏输出 | 只能拉低或高阻态,需外接上拉电阻才能输出高电平 | I2C、电平转换、总线通信 |
备注:开漏输出一般应用在I2C、SMBUS通讯等需要“线与”功能的总线电路中。除此之外,还用在电平不匹配的场合,如需要输出5伏的高电平,就可以在外部接一个上拉电阻,上拉电源为5V, 并且把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V的电平。
2.3 复用功能模式
模式 | 特性 | 典型应用 |
---|---|---|
复用推挽 | 外设控制输出(如SPI MOSI、USART TX),驱动能力同推挽输出 | 外设通信(高速信号) |
复用开漏 | 外设控制输出(如I2C SDA),需外接上拉电阻 | I2C、CAN总线 |
2.4 模拟模式
模式 | 特性 | 典型应用 |
---|---|---|
模拟输入/输出 | 关闭数字功能,引脚直接连接ADC/DAC | 传感器信号采集(ADC) |
3.GPIO关键参数
3.1 输出驱动能力
-
推挽输出:可主动输出高/低电平,驱动电流通常达±20mA(具体见芯片手册)。
-
开漏输出:仅能拉低或高阻态,高电平依赖外部上拉电阻(如I2C的4.7kΩ)。
3.2 速度配置

STM32 GPIO支持可配置的输出速率(防止信号振铃):
-
低速(2MHz):用于低干扰场景(如按键)。
-
中速(10MHz):一般外设(如UART)。
-
高速(50MHz):高速信号(如SPI、PWM)。
4.常见问题与注意事项
4.1 模式选择错误的影响
-
输入浮空:若外部信号浮空,可能读到随机电平(需加上拉/下拉)。
-
开漏输出未接上拉:无法输出高电平(表现为始终低电平)。
4.2 复用推挽与推挽输出的区别
复用推挽(Alternate Function Push-Pull)和推挽输出(General Purpose Push-Pull)是两种常用的输出模式,它们的核心区别在于控制信号的来源和应用场景。以下是详细对比:
特性 | 推挽输出(GPIO_MODE_OUTPUT_PP) | 复用推挽(GPIO_MODE_AF_PP) |
---|---|---|
控制信号来源 | 直接由CPU写GPIO寄存器控制(如HAL_GPIO_WritePin ) | 由外设硬件自动控制(如SPI、USART、TIM) |
典型应用 | 普通数字信号输出(LED、继电器等) | 外设通信(SPI MOSI、USART TX、PWM等) |
配置方式 | 无需绑定外设 | 需指定复用功能(如GPIO_AF4_I2C1 ) |
灵活性 | 可随时通过代码改变电平 | 电平由外设自动生成,CPU不可直接干预 |
4.3 电平兼容性
-
3.3V容忍:STM32 GPIO一般为3.3V电平,与5V器件通信需电平转换(如开漏模式+上拉至5V)。