什么是 GPIO?
GPIO 是微控制器(如 STM32)上的引脚,这些引脚可以根据需要配置为输入或输出,用来连接外部设备或传感器。想象一下,GPIO 就像是一个多功能插座,你可以根据需求把它变成电源插座(输出)或信号接收器(输入)。
GPIO 的主要模式
1. 输出模式
当 GPIO 设置为输出模式时,它就像一个开关,可以控制其他设备的通断状态。
-
推挽输出 (Push-Pull Output):
- 工作原理:这种模式下,GPIO 引脚可以直接输出高电平(5V 或 3.3V)或低电平(0V)。它就像是一个双向开关,既能提供电流也能切断电流。
- 应用场景:常用于驱动 LED、继电器等简单负载。例如,点亮或熄灭 LED 灯。
-
开漏输出 (Open-Drain Output):
- 工作原理:在这种模式下,GPIO 引脚只能拉低电压(接地),不能主动提供高电平。通常需要外接一个上拉电阻来提供高电平。
- 应用场景:适用于 I²C 总线通信、按键检测等场合,因为它可以实现多个设备共享一条总线而不发生冲突。
-
复用推挽输出 (Alternate Function Push-Pull Output)
工作原理
在这种模式下,GPIO 引脚可以被配置为执行多种不同的外设功能之一。它不仅可以输出高电平或低电平,还可以通过内部上拉电阻确保高电平时的稳定性。推挽输出的特点是它可以主动提供电流来驱动负载。
应用场景
- 外设通信:常用于 SPI、UART 等通信协议中的 MOSI、MISO、SCK 线路。
- LED 驱动:可以直接驱动 LED,尤其是在需要较亮亮度的情况下。
- 继电器控制:适用于需要较高驱动能力的场合,如继电器或电机驱动器。
复用开漏输出 (Alternate Function Open-Drain Output)
工作原理
在这种模式下,GPIO 引脚同样可以配置为执行多种不同的外设功能。然而,与推挽输出不同的是,开漏输出只能拉低电压(接地),不能主动提供高电平。通常需要外部或内部上拉电阻来确保高电平时的稳定性。
应用场景
- I²C 总线通信:特别适合 I²C 协议,因为它允许多个设备共享同一总线而不发生冲突。
- 按键检测:可以用来实现按键输入,尤其是当多个按键共用一条线路时。
- 电平转换:在不同电压系统之间进行信号传输时,开漏输出可以简化电平转换电路。
2. 输入模式
当 GPIO 设置为输入模式时,它就像一个传感器,用来检测外部信号的变化。
-
浮空输入 (Floating Input):(x)
- 工作原理:这种模式下,GPIO 引脚没有内部上下拉电阻,因此它的状态是不确定的(“浮动”),容易受到外界干扰。
- 应用场景:不推荐使用,除非你有特定的需求并且能确保信号稳定。
-
上拉输入 (Pull-Up Input):
- 工作原理:内部有一个电阻将引脚拉到高电平(通常是 VCC)。当外部电路将引脚拉低时,它可以检测到低电平。
- 应用场景:常用于按键检测。按下按键时,引脚被拉低;松开按键时,引脚回到高电平。
-
下拉输入 (Pull-Down Input):
- 工作原理:内部有一个电阻将引脚拉到低电平(通常是 GND)。当外部电路将引脚拉高时,它可以检测到高电平。
- 应用场景:同样用于按键检测,但方式相反。按下按键时,引脚被拉高;松开按键时,引脚回到低电平。
-
模拟输入 (Analog Input):
- 工作原理:这种模式允许 GPIO 引脚接收连续变化的电压值,而不是简单的高低电平。通过 ADC(模数转换器)将模拟信号转换为数字信号。
- 应用场景:用于读取传感器数据,如温度、湿度、光照强度等。