STM32 GPIO 初始化要点速查

本文是排版示例,兼作以后写文章的模板:展示代码块、表格、列表、引用等全部样式。

时钟先行

任何外设初始化之前,先开时钟。GPIO 挂在 RCC 的 AHB1/AHB2 上(F4 系列为 AHB1):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* 使能 GPIOA 与 GPIOC 时钟(STM32F4 HAL) */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();

/* 配置 PC13 为推挽输出(板载 LED 常见位置) */
GPIO_InitTypeDef gpio = {
.Pin = GPIO_PIN_13,
.Mode = GPIO_MODE_OUTPUT_PP,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW,
};
HAL_GPIO_Init(GPIOC, &gpio);

/* 点灯(板载 LED 通常低电平点亮) */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

模式速查表

GPIO 模式速查示意

模式 缩写 典型用途 注意事项
推挽输出 OUTPUT_PP LED、片选信号 有真实高低电平驱动能力
开漏输出 OUTPUT_OD I2C、电平转换 需外接上拉电阻
浮空输入 INPUT 按键(外部上下拉时) 悬空电平不定,勿长用
上拉输入 INPUT_PULLUP 按键(省外部电阻) 内部上拉约 40kΩ
模拟功能 ANALOG ADC、DAC 最省电,数字缓冲器断开

调试检查清单

  1. 时钟开了没有(最高频翻车点)
  2. 引脚有没有被复用为其他外设(查 Alternate function 表)
  3. 上下拉方向与外部电路是否冲突
  4. 输出速度是否匹配信号频率(LOW / MEDIUM / HIGH / VERY_HIGH)

经验法则:引脚行为诡异时,先读一遍 GPIOx->MODERGPIOx->AFR 寄存器实际值,别相信配置代码”应该”生效。

相关内容可参考本站后续的 中断与 DMA 笔记(占位链接,正式文章发布后替换)。

加粗斜体行内代码外部链接——都在这一段里了。