STM32之GPIO输出

在 STM32 的开发中,GPIO(通用输入/输出)是一种极其重要且常用的外设资源。无论是用于控制 LED、按键、电机驱动,还是与其他外设之间通信,GPIO 都是实现这些功能的核心接口。


一、示例代码

这是一个在 STM32 HAL 库中非常常见的初始化函数,用于配置 GPIO 引脚为输出模式,并设置相应的参数。

/**
 * @brief     初始化GPIO引脚(用于LED控制)
 * @param     无
 * @retval    无
 */
void GPIO_Init(void)
{
    /* 初始化GPIO结构体,所有成员默认为0 */
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* 使能 GPIO 端口时钟 */
    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOF_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();

    /* 设置GPIOC端口上LED1、LED2、LED3引脚初始状态为高电平 */
    HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin, GPIO_PIN_SET);


    GPIO_InitStruct.Pin = LED1_Pin | LED2_Pin | LED3_Pin;   /* 设置GPIO引脚属性:选择LED1、LED2、LED3引脚 */
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;             /* 设置工作模式为推挽输出 */
    GPIO_InitStruct.Pull = GPIO_PULLUP;                     /* 设置内部上拉电阻 */
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;            /* 设置输出速度为低速 */
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);                 /* 初始化GPIO引脚,传入端口地址和配置结构体 */
}

二、GPIO_InitStruct参数配置

1、GPIO_InitStruct.Pin

选择要配置的引脚

2、 GPIO_InitStruct.Mode

设置 GPIO 引脚的 工作模式

推挽输出(Output Push Pull)

  • 输入参数:GPIO_MODE_OUTPUT_PP
  • 描述:引脚输出低或高电平,有驱动能力,适用于驱动负载
  • 场景:LED、数码管、外部电路驱动

开漏输出(Output Open Drain)

  • 输入参数:GPIO_MODE_OUTPUT_OD
  • 描述:输出高电平由外部上拉电阻决定,输出低电平由内部施放
  • 场景:可能用于 I2C、逻辑总线

复用推挽输出

  • 输入参数:GPIO_MODE_OUTPUT_PP
  • 描述:GPIO_MODE_OUTPUT_AF_PP
  • 场景:SPI、I2C、UART 通信接口

复用开漏输出

  • 输入参数:GPIO_MODE_OUTPUT_AF_OD
  • 描述:用于通信协议(如 SPI、UART、I2C)等,信号链路由外部上拉
  • 场景:需要外部上拉的通信协议

3、GPIO_InitStruct.Pull

设置 GPIO 引脚的 上拉或下拉电阻

启用上拉电阻

  • 输入参数:GPIO_PULLUP
  • 描述:默认状态为高电平,适用于按钮、传感器等

启用下拉电阻

  • 输入参数:GPIO_PULLUP
  • 描述:默认状态为低电平

无上下拉

  • 输入参数:GPIO_NOPULL
  • 描述:不自动上拉或下拉引脚

4、GPIO_InitStruct.Speed

设置 GPIO 引脚工作速度

低速

  • 输入参数:GPIO_SPEED_FREQ_LOW
  • 描述:最高5MHz

中速

  • 输入参数:GPIO_SPEED_FREQ_MEDIUM
  • 描述:5MHz ~ 25MHz

高速

  • 输入参数:GPIO_SPEED_FREQ_HIGH
  • 描述:25MHz ~ 50MHz

极高速

  • 输入参数:GPIO_SPEED_FREQ_VERY_HIGH
  • 描述:50MHz ~ 120MHz
posted @ 2025-10-31 22:35  比特向阳  阅读(2)  评论(0)    收藏  举报