HAL = Hardware Abstraction Layer,硬件抽象层。它把寄存器操作封装成「人类语言」函数:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 点亮 PA5
HAL 库优势:

STM32Cube_FW_F4 固件包结构:
STM32Cube_FW_F4_V1.x.x/
├── Drivers/
│ ├── BSP/ # 板级支持包(LCD/SDRAM 等)
│ ├── CMSIS/ # ARM 内核头 + 启动文件
│ └── STM32F4xx_HAL_Driver/ # HAL 库主体
│ ├── Inc/ # 头文件
│ └── Src/ # 源文件
├── Middlewares/ # 中间件(FreeRTOS/LwIP/FatFs/USB)
├── Projects/ # 例程
└── Utilities/ # 工具(LCD 字模/PC 测试软件)
HAL 库主要文件:
| 文件 | 作用 |
|---|---|
stm32f4xx_hal.h | 包含所有 HAL 头 + 通用宏 |
stm32f4xx_hal.c | HAL_Init / HAL_Delay / HAL_GetTick 等通用函数 |
stm32f4xx_hal_xxx.c | 各外设 HAL 实现(GPIO/USART/SPI/I2C/...) |
stm32f4xx_hal_msp.c | 外设底层回调(GPIO/时钟/DMA 中断初始化) |

分层:
HAL_GPIO_Init 等通用 API;HAL_GPIO_MspInit 时钟/GPIO/DMA 配置;典型流程:
main.c 骨架;HAL_MspInit() 里加硬件相关配置;HAL_GPIO_Init();xxx_IRQHandler 里调 HAL_xxx_IRQHandler + 用户回调。例:USART 收发字符串:
HAL_UART_Transmit(&huart1, (uint8_t *)"Hello\n", 6, 100);
HAL_UART_Receive_IT(&huart1, rx_buf, 1); // 启动接收中断
// 中断回调
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == USART1) {
// 处理 rx_buf[0]
HAL_UART_Receive_IT(&huart1, rx_buf, 1); // 重新开启
}
}
