stm32f1xx_hal.c
是 STM32F1 系列 HAL 库(硬件抽象层)的核心文件,主要实现以下功能:
1. HAL 库的初始化与反初始化
-
HAL_Init()
初始化 HAL 库环境,包含:- Flash 预取缓冲配置(提升代码执行效率)。
- NVIC 中断优先级分组设置(默认使用
NVIC_PRIORITYGROUP_2
)。 - SysTick 定时器初始化(默认 1ms 时基,用于系统节拍和延时)。
- 调用
HAL_MspInit()
(用户可自定义的底层硬件初始化,如时钟、GPIO 等)。
-
HAL_DeInit()
反初始化 HAL 库,复位所有外设并调用HAL_MspDeInit()
(用户可自定义资源清理)。
2. 系统时基与延时管理
- SysTick 定时器配置
通过HAL_InitTick()
配置 SysTick 定时器,生成周期性中断(默认 1ms),为系统提供时基。 - 延时函数
HAL_Delay()
:基于 SysTick 的阻塞式毫秒级延时。HAL_IncTick()
:系统节拍计数器递增(每 SysTick 中断调用一次)。HAL_GetTick()
:获取当前系统节拍值(用于时间戳计算)。
- 时基频率控制
HAL_SetTickFreq()
和HAL_GetTickFreq()
动态调整/获取 SysTick 频率(如 1kHz 或 100Hz)。
3. 设备信息与版本管理
- HAL 库版本号
HAL_GetHalVersion()
返回 HAL 库的版本信息(如0x01010700
表示 V1.1.7)。 - 芯片标识与版本
HAL_GetDEVID()
:获取设备标识符(区分芯片型号)。HAL_GetREVID()
:获取芯片修订版本号。HAL_GetUIDw0/1/2()
:读取 96 位唯一设备标识符(UID)。
4. 低功耗模式下的调试支持
- 调试模式控制
通过HAL_DBGMCU_EnableDBGSleepMode()
、HAL_DBGMCU_DisableDBGStopMode()
等函数,控制调试模块在以下模式下的行为:- SLEEP 模式:保持调试接口活动。
- STOP 模式:允许调试唤醒。
- STANDBY 模式:配置调试接口是否可用。
注意:某些芯片在正常模式下无法访问调试寄存器,需参考芯片勘误表。
5. 弱函数定义(用户可覆盖)
HAL_MspInit()
和HAL_MspDeInit()
用户可在此函数中实现自定义的硬件初始化/反初始化(如时钟配置、外设使能)。HAL_InitTick()
和HAL_IncTick()
用户可替换 SysTick 为其他定时器(如 TIM)作为时基源。
6. 外设复位控制
HAL_DeInit()
中的 APB/AHB 总线复位
通过强制复位和释放所有外设,确保系统重启时外设状态一致。
关键作用
- HAL 库入口:
HAL_Init()
是使用任何 HAL 外设驱动前必须调用的函数。 - 跨平台兼容性:为不同 STM32F1 芯片提供统一的硬件操作接口,简化代码移植。
- 基础服务:为其他外设驱动(如 GPIO、UART、SPI)提供时基、中断管理和调试支持。
典型应用场景
- 系统启动时调用
HAL_Init()
初始化硬件环境。 - 使用
HAL_Delay()
实现简单延时。 - 通过设备标识符实现固件兼容性检查。
- 调试低功耗模式时,控制调试模块行为。
- 自定义时基源(如使用 TIM 替换 SysTick)时重写弱函数。