在 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