再学GPIO(一)
GPIO输出模式
STM32的GPIO(General Purpose Input Output 通用输入输出)引脚支持多种输出模式,不同模式决定了引脚的驱动能力和信号特性。STM32的GPIO输出模式主要分为以下4种:
-
推挽输出(Push-Pull Output)
-
开漏输出(Open-Drain Output)
-
复用推挽输出(Alternate Function Push-Pull)
-
复用开漏输出(Alternate Function Open-Drain)
这里我们先讲解推挽输出和开漏输出,其他的在后面的外设中讲解
推挽输出(Push-Pull)
1、原理
输出高电平,通过PMOS管导通,将引脚拉至VDD(3.3V)。输出低电平,通过NMOS管导通,将引脚拉至GND(0V)。两个MOS管交替导通,形成“推”和“挽”的驱动方式。推挽输出有很强的驱动能力。
2、特点
-
低输出阻抗
推挽输出的导通器件(上管或下管)在开关状态下阻抗极低(通常为几欧姆至几十欧姆),能够提供较大的灌电流(Sink Current)和拉电流(Source Current)。
- 高低电平驱动对称
高电平和低电平均由主动驱动,无需依赖外部电阻分压或上拉/下拉电路,输出电平稳定且切换速度快。
- 快速电平切换
推挽结构通过互补的开关器件直接切换高低电平,避免了因外部电路延迟导致的信号边沿缓慢问题,适合高速数字信号传输。
3、注意事项
-
短路风险:推挽输出高低电平均由主动驱动,若两个开关管同时导通,可能导致电源到地的短路。
-
电平兼容性:输出电平由电源电压(VCC)决定,若需与不同电压设备通信(如3.3V与5V系统),需添加电平转换电路。
开漏输出(Open-Drain)
1、原理
输出高电平,NMOS管关闭,引脚悬空(需外接上拉电阻拉至高电平)。输出低电平,NMOS管导通,引脚拉至GND。
2、特点
-
电平兼容性灵活
高电平由外部上拉电阻的电源(VCC)决定,因此可轻松适配不同电压的系统(如3.3V与5V设备通信),无需额外电平转换电路。
示例:将上拉电阻连接到5V电源,即可让3.3V的MCU引脚输出5V高电平。
-
总线共享能力
允许多个设备共享同一总线(如I2C总线),通过“线与”(Wire-AND)逻辑避免冲突:任一设备拉低总线时,总线整体为低电平;所有设备均释放总线时,总线由外部上拉电阻拉高。
-
驱动能力受限
高电平驱动能力弱:高电平的上升速度和驱动电流受外部上拉电阻阻值限制。
低电平驱动能力强:导通时可通过MOSFET直接拉低,灌电流能力通常较强。
-
信号边沿速度较慢
高电平的上升时间取决于上拉电阻和线路寄生电容(RC时间常数),可能导致信号延迟,不适用于高速通信(如SPI)。
3、注意事项
-
上拉电阻选择:阻值过小:高电平驱动力强,功耗高。阻值过大:功耗低,信号上升速度慢。
-
总线电容限制:长导线或连接过多设备会增加总线电容,需降低通信速率或减小上拉电阻。
-
抗干扰能力:开漏输出的高电平易受噪声干扰,需注意PCB布局和屏蔽
GPIO输入模式
STM32的GPIO输入模式用于读取外部信号的电平状态(高/低电平),需根据外部电路特性选择合适的模式。输入模式主要分为以下4种:
-
浮空输入(Floating Input)
-
上拉输入(Pull-Up Input)
-
下拉输入(Pull-Down Input)
-
模拟输入(Analog Input)
这里我们先讲解浮空输入、上拉输入、下拉输入,其他的在后面的外设中讲解
浮空输入(Floating Input)
1、原理
内部无上拉/下拉电阻,浮空输入模式下,GPIO引脚内部的上拉和下拉电阻均被断开,引脚直接与输入缓冲器相连,对外呈现高阻抗(通常为兆欧级)。电平由外部决定,引脚的电平完全由外部连接的电路或信号源决定。若无外部信号,引脚可能处于不确定的电压状态。
2、特点
-
信号灵敏度高:
高输入阻抗使其对微弱信号敏感,适合连接高输出阻抗的传感器(如某些压电传感器、电容式触摸按键)。 -
电平灵活性:
电平完全由外部电路控制,适用于需要动态切换电平的场景(如总线通信、模拟信号采样前的数字输入)。 -
低功耗:
无内部电阻的电流路径,静态功耗极低。 -
抗干扰能力差:
高阻抗引脚易受电磁干扰(EMI)或环境噪声影响,导致电平波动(如引脚悬空时可能随机跳变)。 -
电平不确定性:
若外部电路未明确驱动引脚(如开关断开、传感器未激活),引脚电平可能处于中间值(非0/1),导致逻辑误判。 -
静电敏感:
高阻抗引脚更易积累静电电荷,可能引发闩锁效应或损坏芯片。
3、注意事项
-
避免引脚悬空:未连接的浮空输入引脚可能因噪声或静电积累导致逻辑错误或芯片损坏。
-
噪声抑制:长导线或高噪声环境易引入干扰。
-
电平兼容性:外部信号电压超过GPIO耐压值(如5V信号输入3.3V MCU)。
上拉输入(Pull-Up Input)
1、原理
内部上拉电阻:输入引脚内部连接一个电阻(通常为 20kΩ~50kΩ,具体值因芯片型号而异)到电源。外部信号驱动:引脚电平由外部电路决定。当外部信号未主动拉低时,上拉电阻将引脚电压维持在高电平;当外部信号拉低时,电流通过上拉电阻流向地,引脚电平变为低电平。
2、特点
-
电平确定性:
未连接外部信号时,引脚始终为高电平,避免浮空输入的不确定状态,减少逻辑误判。 -
抗干扰能力强:
上拉电阻降低了输入阻抗,减少环境噪声对电平的影响。 -
简化外部电路:
无需外接上拉电阻(如按键直接接地即可使用)。 -
低静态功耗:
上拉电阻阻值较大(几十kΩ),静态电流极小
-
驱动能力有限:
外部信号需提供足够的灌电流(Sink Current)以克服上拉电阻,将电平拉低。
示例:若上拉电阻为40kΩ,拉低至0V需电流≈3.3V/40kΩ≈82μA,通常外部器件可轻松满足。 -
上升沿延迟:
引脚电平从低到高时,需通过上拉电阻对寄生电容充电,可能导致信号上升沿较慢(对高速信号不友好)。
3、注意事项
-
上拉电阻阻值选择,阻值过小:抗干扰能力更强,上升沿更快。静态功耗增加。阻值过大,:功耗更低。易受噪声干扰,上升沿延迟明显。
-
外部驱动能力验证
-
电平兼容性,高压信号输入,若外部信号电压高于GPIO耐压值(如5V),需添加电平转换电路(如分压电阻、MOSFET缓冲器)。低压信号输入,若外部信号电压低于逻辑高阈值(如1.8V系统),可能无法可靠识别为高电平。
下拉输入(Pull-Down Input)
1、原理
内部下拉电阻,输入引脚内部连接一个电阻(通常为 20kΩ~50kΩ,具体值因芯片型号而异)到地(GND)。外部信号驱动,引脚电平由外部电路决定。当外部信号未主动拉高时,下拉电阻将引脚电压维持在低电平;当外部信号拉高时,电流通过下拉电阻流向电源,引脚电平变为高电平。
2、特点
-
电平确定性:
未连接外部信号时,引脚始终为低电平,避免浮空输入的不确定状态,减少逻辑误判。 -
抗干扰能力强:
下拉电阻降低了输入阻抗,减少环境噪声对电平的影响。 -
简化外部电路:
无需外接下拉电阻(如按键直接接电源即可检测高电平信号)。 -
低静态功耗:
下拉电阻阻值较大(几十kΩ),静态电流极小(如3.3V系统,电流≈3.3V/40kΩ≈82μA)。 -
驱动能力要求:
外部信号需提供足够的拉电流(Source Current)以克服下拉电阻,将电平拉高。 -
下降沿延迟:
引脚电平从高到低时,需通过下拉电阻对寄生电容放电,可能导致信号下降沿较慢(对高速信号不友好)。
3、注意事项
-
上拉电阻阻值选择,阻值过小:抗干扰能力更强,下降沿更快。静态功耗增加。阻值过大,功耗更低。易受噪声干扰,下降沿延迟明显。
-
外部驱动能力验证
-
电平兼容性,高压信号输入,若外部信号电压高于GPIO耐压值,需添加电平转换电路(如分压电阻、MOSFET缓冲器)。低压信号输入,若外部信号电压低于逻辑高阈值,可能导致电平识别错误。