1. GPIO基础配置:从零开始点亮LED
刚开始接触STM32的时候,我最先折腾的就是GPIO控制。GPIO就像是单片机的"手脚",负责与外部世界交互。HAL库的GPIO函数让这个过程变得简单多了,不需要直接操作寄存器,大大降低了入门门槛。
先来看看最核心的初始化函数HAL_GPIO_Init。这个函数需要两个参数:一个是GPIO组(比如GPIOA、GPIOB),另一个是初始化结构体。结构体里面包含了引脚编号、工作模式、上下拉配置和输出速度。我刚开始用的时候经常忘记使能GPIO时钟,结果配置了半天都没反应,后来才发现少了__HAL_RCC_GPIOx_CLK_ENABLE()这一行。
// 完整的GPIO初始化示例
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 必须先使能GPIO时钟
__HAL_RCC_GPIOB_CLK_ENABLE();
// 配置PB5引脚为推挽输出
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(GPIOB, &GPIO_InitStruct);
}
输出速度的选择很重要。低速(LOW)适合LED指示灯这类不需要快速响应的场景,中速(MEDIUM)适合一般的串口通信,高速(HIGH)则用于SPI、I2C等需要较快响应的外设。如果速度配置不当,可能会导致信号失真或者功耗过高。
2. GPIO输出控制实战技巧
配置好GPIO之后,就可以开始控制输出电平了。HAL_GPIO_WritePin是最常用的输出函数,用起来很简单:指定GPIO组、引脚和要设置的电平状态(SET或RESET)。我经常用这个函数控制LED的亮灭,或者驱动继电器、蜂鸣器之类的器件。
// 控制LED亮灭的典型用法
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); // 点亮LED
HAL_Delay(500); // 延时500ms
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET); // 熄灭LED
HAL_Delay(500);
不过在实际项目中,如果频繁调用HAL_
3152



被折叠的 条评论
为什么被折叠?



