GPIO (General Purpose Input/Output) 是嵌入式系统最常用的外设之一,用于连接和控制外部设备,如 LED、按键、传感器、继电器等。
1.1 GPIO 模式
GPIO 可配置为不同的工作模式,以满足不同的硬件需求:
模式 | 描述 |
---|---|
输入模式 | GPIO 用于接收外部信号。 |
- 浮空输入 (Floating Input) | 无内部上拉或下拉电阻,适合外部信号驱动。 |
- 上拉输入 (Pull-up Input) | 内部连接上拉电阻,输入默认为高电平。 |
- 下拉输入 (Pull-down Input) | 内部连接下拉电阻,输入默认为低电平。 |
- 模拟输入 (Analog Input) | 用于连接模拟信号(如 ADC)。 |
输出模式 | GPIO 用于输出信号。 |
- 推挽输出 (Push-Pull) | 输出高电平或低电平,适合驱动 LED、继电器等。 |
- 开漏输出 (Open-Drain) | 输出低电平或高阻状态,适合与 I²C 等总线连接。 |
复用功能模式 | GPIO 引脚复用为外设功能(如 USART、SPI、I²C 等)。 |
输入/输出高速模式 | 支持快速切换(最高可达 50 MHz),适用于高速通信。 |
1.2 GPIO 特点
- 可配置方向:每个引脚可以独立配置为输入或输出。
- 中断功能:输入模式支持边沿触发中断(上升沿、下降沿或双边沿)。
- 复用功能:每个引脚可复用为多种外设功能。
- 端口组:STM32 GPIO 按端口分组,通常为 A、B、C 等,每组包含最多 16 个引脚(PA0-PA15、PB0-PB15)。
1.3 GPIO 控制寄存器
在 STM32F103 上,GPIO 的配置通过以下寄存器实现:
寄存器名称 | 描述 |
---|---|
GPIOx_CRL | 配置低 8 个引脚(Pin 0 - Pin 7)的模式和功能。 |
GPIOx_CRH | 配置高 8 个引脚(Pin 8 - Pin 15)的模式和功能。 |
GPIOx_IDR | 输入数据寄存器,用于读取引脚的电平状态。 |
GPIOx_ODR | 输出数据寄存器,用于控制引脚的输出电平。 |
GPIOx_BSRR | 置位/复位寄存器,用于高效地设置或清除引脚。 |
GPIOx_BRR | 清除寄存器,用于快速清除指定引脚的状态。 |
GPIOx_LCKR | 引脚锁定寄存器,用于防止误修改引脚配置。 |