CuiFrost's Blog

STM32 HAL库开发指南

STM32 HAL库开发经验总结和常用技巧

简介#

STM32 HAL(Hardware Abstraction Layer)库是ST官方提供的硬件抽象层库,简化了STM32微控制器的开发流程。本文总结了一些常用的开发经验和技巧。

开发环境#

  1. 安装 STM32CubeIDE

    • 下载地址:ST官网
    • 或使用 STM32CubeMX + VS Code + PlatformIO
  2. 配置开发环境

    • 安装必要的驱动(ST-Link, USB转串口等)
    • 配置代码生成选项
    • 设置调试参数
  3. 创建新项目

    • 选择芯片型号
    • 配置时钟树
    • 启用需要的外设

常用外设配置#

GPIO 配置#

// GPIO 初始化示例
void GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    
    // 使能时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();
    
    // 配置引脚
    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);
}
c

UART 配置#

TIM 定时器配置#

调试技巧#

// printf 重定向到串口
#ifdef __GNUC__
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
    return ch;
}
c

常见问题#

  1. 时钟配置错误

    • 使用 STM32CubeMX 配置时钟树
    • 检查 HSE/HSI 是否正确启用
  2. 中断不触发

    • 检查 NVIC 是否使能
    • 确认中断优先级设置
  3. DMA 传输失败

    • 检查 DMA 流和通道配置
    • 确认缓冲区地址对齐

推荐资源#

Edit on GitHub

DOCS