GPIO完整速查卡(标准库 F103)
一、八大模式
| 模式 | 名称 | 典型场景 |
|---|---|---|
GPIO_Mode_AF_PP |
复用推挽输出 | UART/SPI/PWM/CAN |
GPIO_Mode_AF_OD |
复用开漏输出 | I2C(需外部上拉) |
GPIO_Mode_Out_PP |
推挽输出 | LED/蜂鸣器/CS/继电器/MOSFET |
GPIO_Mode_Out_OD |
开漏输出 | 电平转换(需上拉) |
GPIO_Mode_IN_FLOATING |
浮空输入 | UART_RX/外部确定电平信号 |
GPIO_Mode_IPU |
上拉输入 | 按键(低有效) |
GPIO_Mode_IPD |
下拉输入 | 按键(高有效) |
GPIO_Mode_AIN |
模拟输入 | ADC/DAC |
二、各协议/外设配置
| 功能 | 引脚 | 模式 | 初始电平 |
|---|---|---|---|
| UART | TX | AF_PP |
不涉及 |
| RX | IN_FLOATING |
不涉及 | |
| SPI(主机) | SCK/MOSI/MISO | AF_PP |
不涉及 |
| CS | Out_PP |
Bit_SET(无效态) |
|
| SPI(从机) | SCK/MOSI | IN_FLOATING |
不涉及 |
| MISO | AF_PP |
不涉及 | |
| I2C | SCL/SDA | AF_OD + 上拉 |
不涉及 |
| CAN | TX/RX | AF_PP |
不涉及 |
| PWM | 输出 | AF_PP |
不涉及(由定时器控制) |
| ADC | 输入 | AIN |
不涉及 |
| MOSFET | 栅极 | Out_PP |
Bit_RESET(默认关断) |
| 继电器 | 控制 | Out_PP |
Bit_RESET(默认断开) |
| LED(低有效) | 输出 | Out_PP |
Bit_SET(默认熄灭) |
| LED(高有效) | 输出 | Out_PP |
Bit_RESET(默认熄灭) |
| 按键(低有效) | 输入 | IPU |
不涉及 |
| 按键(高有效) | 输入 | IPD |
不涉及 |
三、操作模板
c
// 通用初始化步骤
GPIO_InitTypeDef gpio;
// 1. 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 2. 输出类:先设电平
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); // 或 Bit_SET
// 3. 再初始化
gpio.GPIO_Pin = GPIO_Pin_0;
gpio.GPIO_Mode = GPIO_Mode_Out_PP; // 根据场景改模式
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio);
// 读写
GPIO_SetBits(GPIOA, GPIO_Pin_0); // 高
GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 低
uint8_t val = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
四、低功耗关键
- 配置顺序:先设ODR电平 → 再Init(避免配置过程毛刺)
- 输出模式:电平必须与外部电路一致,否则漏电
- 输入模式:禁止浮空(
IN_FLOATING),用IPU/IPD或外部上拉/下拉 - 未用引脚:配成
IPU或IPD(推挽输出也可能漏电)
五、速记口诀
输出设电平,输入防悬空,模拟只AIN,开漏仅I2C,MOS/继电先关断。