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。