Skip to content

GPIO

通用输入输出口。它是单片机芯片四周那两排密密麻麻的引脚。

它的功能就两个:

  1. 读 (Input):读取引脚上的电平是高 (3.3V) 还是低 (0V)。
    • 例子:读按键状态、读传感器信号。
  2. 写 (Output):控制引脚输出高电平或低电平。
    • 例子:点亮 LED、控制继电器、模拟通信协议。

二、 GPIO 有标志位吗?

这得分情况看。

1. 当作普通 IO 用时:没有“标志位”,只有“状态寄存器”

不像 UART 或 SPI 需要等 TXE (发送空) 才能发数据,GPIO 是瞬时的。 你让它翻转,它立刻(纳秒级)就翻转。所以它不需要“完成标志”。

但是,它有两个核心寄存器,充当了“实时状态版”:

  • IDR (Input Data Register)输入数据寄存器
    • 这就是你能看到的引脚真实电平。读取它,就是读取当前的电压状态 (0 或 1)。
  • ODR (Output Data Register)输出数据寄存器
    • 这是你命令它输出的电平。

2. 当作“外部中断”用时:有标志位!(EXTI)

这是新手最容易混淆的地方。 如果你把 GPIO 配置成中断模式(比如按键按下触发中断),GPIO 本身不存标志位,它会把信号传给 EXTI (外部中断控制器)

  • PR (Pending Register)挂起标志位(在 EXTI 模块里)。
    • 当按键按下,产生下降沿,EXTI_PR 置 1。
    • 注意: 进中断后必须手动清除这个位,否则 CPU 会发疯一样无限进中断。