GPIO作为输入还是输出

GPIO(通用输入输出)作为输入还是输出,完全取决于外部电路的需求你要实现的功能。判断标准很简单:看数据流向

一、GPIO 作为输入 (Input)

场景:芯片需要“读取”外部信号的状态

此时引脚处于高阻态,芯片被动检测引脚上的电平(高电平/低电平)。

典型应用:

  • 读取按键状态:按键按下时引脚接地变为低电平,松开时上拉电阻拉高。
  • 读取传感器信号:例如人体红外传感器输出高电平表示有人,雨滴传感器输出低电平表示有水。
  • 读取其他芯片的状态:例如读取 SD 卡插座的“写保护”开关引脚,判断是否允许写入。
  • 总线协议(数据接收):如 UART 的 RX 引脚、I2C 的 SDA(有时是双向)。

关键特点:
需要配置上下拉电阻(防止引脚悬空导致电平不确定),例如上面代码中的OL_GPIO_INPUT


二、GPIO 作为输出 (Output)

场景:芯片需要“控制”外部设备

芯片主动将引脚拉高(输出高电平,通常是 3.3V/5V)或拉低(输出低电平,0V)。

典型应用:

  • 控制 LED 亮灭:输出高电平点亮 LED,低电平熄灭。
  • 驱动 MOS 管/继电器:输出高电平打开继电器,从而控制电机、水泵等大功率设备。
  • 产生信号波形:输出 PWM 波控制舵机角度、调节电机转速或 LED 亮度。
  • 总线协议(数据发送):如 UART 的 TX 引脚、SPI 的 MOSI 引脚。

关键特点:
通常需要关注驱动能力(是否推挽输出)。如果是开漏输出,需要外部上拉电阻。


三、快速判断表

判断依据 应配置为输入 应配置为输出
数据方向 芯片 外部 芯片 外部
外部元件 按键、开关、传感器信号线 LED、蜂鸣器、继电器、电机驱动
引脚状态 由外部电路决定,芯片只能读 由芯片程序决定,强行拉高/拉低
典型风险 引脚悬空(电平抖动) 电流过大烧毁引脚

四、针对你之前代码的具体例子

config.gpio_dir = OL_GPIO_INPUT;  // 配置为输入模式

这段代码配置了一个输入引脚,很可能用于读取某个传感器的触发信号。当传感器状态变化产生上升沿时,会触发 test_isr_cb 回调函数,芯片读取到该事件后执行相应动作。

对应的常见接线场景:

  • 场景 A(输入):按键一端接 GPIO,另一端接 GND。按键按下 → 芯片读到低电平。
  • 场景 B(输出):GPIO 接 LED 正极(串电阻),负极接 GND。芯片输出高电平 → LED 亮起。

注意: 同一个 GPIO 引脚不能同时作为输入和输出(除非是特殊的双向总线协议,如 I2C 或 1-Wire,但工作时也必须在输入/输出模式间切换)。

posted @ 2026-06-11 10:56  我不是萧海哇~~~  阅读(20)  评论(0)    收藏  举报