1.1: STM32外设-GPIO


本教程适用于 STM32 系列芯片(如 STM32F1、F4 等),以标准外设库或 HAL 库为基础,讲解如何配置和使用 GPIO(通用输入输出)。


目录


简介

GPIO(General Purpose Input/Output)是 STM32 最基本的外设之一,允许 MCU 与外部设备进行通信,如 LED、按键、继电器等。


GPIO 工作模式

STM32 的 GPIO 引脚支持以下几种模式:

  • 输入模式(Input)
    • 浮空输入
    • 上拉/下拉输入
  • 输出模式(Output)
    • 推挽输出(Push-pull)
    • 开漏输出(Open-drain)
  • 复用功能(AF)
  • 模拟模式(Analog)

使用步骤

1. 时钟使能

每个 GPIO 端口都需要手动开启时钟。例如:

__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能 GPIOA 时钟

2. GPIO 初始化

使用 HAL 库进行初始化示例:

GPIO_InitTypeDef GPIO_InitStruct = {0};

GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

3. GPIO 输入输出操作

输出高/低电平:

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);   // 输出高电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 输出低电平

读取输入电平:

GPIO_PinState state = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);

实战示例

使用 HAL 点亮 LED

假设 LED 接在 PA5:

void LED_Init(void) {
  __HAL_RCC_GPIOA_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

void LED_On(void) {
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}

void LED_Off(void) {
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}

读取按键状态

假设按键接在 PC13:

void Key_Init(void) {
  __HAL_RCC_GPIOC_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;

  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}

uint8_t Key_Read(void) {
  return HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET;
}

小贴士

  • 上拉/下拉电阻选择要根据外部电路情况。
  • 输入引脚建议不要浮空。
  • 推挽模式适合驱动 LED 等;开漏模式适合用于多路共线设备(如 I2C)。
  • 有些 IO 引脚默认是 JTAG/SWD 功能,需要在启动时复用为 GPIO。

参考资料

results matching ""

    No results matching ""

    results matching ""

      No results matching ""