GPIO
通用输入输出口。它是单片机芯片四周那两排密密麻麻的引脚。
它的功能就两个:
- 读 (Input):读取引脚上的电平是高 (3.3V) 还是低 (0V)。
- 例子:读按键状态、读传感器信号。
- 写 (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 会发疯一样无限进中断。