STM32 GPIO(8 种模式,端口 配置 寄存器)
STM32 的 IO 口相比 51 而言要复杂得多,所以使用起来也困难很多。STM32 的 IO口可以由软件配置成如下 8 种模式:
| 序号 | 模式 | 常用举例 |
|---|---|---|
| 1 | 上拉输入 (IPU:Input pull-up) | 按键 |
| 2 | 下拉输入 (IPD:Input-pull-down) | 按键 |
| 3 | 模拟输入 (AIN:Analog Input) | ADC、DAC |
| 4 | 浮空输入 (IN_FLOATING:Input floating) | 1、外部已有明确上/下拉电路时(如I2C总线靠外部电阻上拉) 2、高速信号输入(如UART RX、SPI MISO) |
| 5 | 推挽输出 (Out_PP:Output push-pull) | 1、数字信号输出(如 控制LED、继电器) 2、高速信号(如UART TX、SPI MOSI) 3、高低电平明确切换的场景(如PWM输出) |
| 6 | 开漏输出 (Out_OD:Output open-drain) | 1、电平兼容(如 3.3V与5V器件通信) 2、总线协议(如I2C、单线总线) 3、多设备共享信号线(“线与”逻辑) |
| 7 | 复用推挽功能 (AF_PP:Alternate Function push-pull) | 1、外设需要强驱动能力时(如USART TX、SPI SCK) 2、定时器PWM输出驱动电机、LED 3、高速信号(如SDIO、FSMC) |
| 8 | 复用开漏功能 (AF_OD:Alternate Function open-drain) | 1、支持总线协议的外设(如I2C SDA/SCL) 2、多主机通信(如CAN总线) 3、需要电平转换的复用信号 |
每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字 被访问。STM32 的很多 IO 口都是5V 兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势(I/O Level 标 FT 的就是 5V 电平兼容的)。
STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:
配置模式的 2 个 32 位的端口 配置寄存器 CRL 和 CRH;
2 个 32 位的 数据寄存器 IDR 和 ODR;
1 个 32 位的 置位/复位寄存器 BSRR;
1个 16 位的 复位寄存器 BRR;
1 个 32 位的 锁存寄存器 LCKR。
要了解每个寄存器的详细使用方法,参考《STM32 中文参考手册 V10》P105~P129。
