文章目录
- STM32HAL库
- 1. HAL库介绍
- 2. STM32Cube固件包
- 3. HAL库框架结构
- 4. 新建HAL版本MDK工程
STM32HAL库
1. HAL库介绍
-
HAL库
HAL,英文全称 Hardware Abstraction Layer,即硬件抽象层。HAL库是ST公司提供的外设驱动代码的驱动库,用户只需要调用库的API函数,便可间接配置寄存器。我们写程序控制STM32芯片,其实最终就是控制他的寄存器,使之工作在我们需要的模式下,HAL库将大部分寄存器的操作封装成了函数,我们只需要学习和掌握HAL库的结构和用法,就能方便地驱动STM32工作,以节省开发时间。
-
CMSIS标准
CMSIS(微控制器软件接口标准),全称 Cortex Microcontroller Software Interface Standard ,是由ARM和其合作的芯片厂商、软件工具厂商,共同制定的标准。分为三层,从上到下,分别是用户层、中间层、硬件层。
-
STM32F1结构框图
2. STM32Cube固件包
-
获取方法:www.st.com -> Tools & Software -> Ecosystem -> STM32Cube -> Prodcut selector -> STM32CubeF1
-
STM32CubeF1固件包的目录结构
在固件包的目录结构里面,我们重点关注驱动源码(Drivers),中间文件(Middlewares),ST官方开发板例程(Projects)三个文件夹。
1. 驱动源码(Drivers):
文件夹 子文件 作用 Drivers BSP 板级支持包,用于适配ST官方的开发板(可参考) CMSIS 符合CMSIS的组件,包括:DSP库、Cortex-M内核及其设备文件、微控制器专用头文件、启动文件、专用系统文件等 STM32F1xx_HAL_Driver HAL库外设驱动源码,包括F1系列HAL库源文件和头文件 2. 中间文件(Middlewares):
Middlewares ST STemWin STemWin工具包 STM32_USB_Device_Library USB从机设备支持包 STM32_USB_Host_Library USB主机设备支持包 Third_Party FatFs FAT文件系统支持包 FreeRTOS FreeRTOS实时系统支持包 LwIP LwIP网络通信协议支持包 3. ST官方开发板例程(Projects):
该文件夹存放的是 ST官方的开发板的适配例程,每个文件夹对应一个ST 官方的Demo板, 根据型号的不同提供 MDK 和 IAR 等类型的例程。里面有很多实例,读者可以根据自己的需要来作为参考。
-
Drivers/CMSIS/Device 和Include文件中的关键文件
Device:
文件名称 描述 stm32f1xx.h 是所有F1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义 stm32f103xe.h 包含中断编号定义、外设寄存器结构体类型定义、寄存器映射、寄存器位定义、外设判定 system_stm32f1xx.c system_stm32f1xx.h 定义了系统初始化函数 SystemInit和系统时钟更新函数 SystemCoreClockUpdate startup_stm32f103xe.s 大容量F103系列芯片的启动文件 Include:
cmsis_armcc.h、cmsis_armclang.h、cmsis_compiler.h、cmsis_version.h、core_cm3.h 、 mpu_armv7.h
3. HAL库框架结构
-
Drivers/CMSIS/Stm32F1xxHAL_Driver/Inc Src 库文件介绍
文件 描述 stm32f1xx_hal.c stm32f1xx_hal.h HAL库初始化、系统滴答、HAL库延时等相关函数 stm32f1xx_hal_conf.h HAL库的用户配置文件,用于裁剪HAL库、配置晶振参数等 stm32f1xx_hal_def.h 包含HAL库通用的枚举类型数据和宏定义 stm32f1xx_hal_cortex.h stm32f1xx_hal_cortex.c 内核通用函数定义和声明,如NVIC、MPU、系统软复位、Systick等, 其实主要是对core_cm3.h 文件的相关函数再次封装。 stm32f1xx_hal_ppp.c stm32f1xx_hal_ppp.h 某任意外设驱动源码,PPP表示任意外设 stm32f1xx_hal_ppp_ex.c stm32f1xx_hal_ppp_ex.h 主要是存放外设的扩展(特殊)功能的驱动源码,PPP表示任意外设 stm32f1xx_II_ppp.c stm32f1xx_II_ppp.h LL库驱动源码,在部分STM32f1xx_hal_ppp.c 或stm32f1xx_hal_ppp_ex.c 中会被调用 -
库文件中API函数和变量的命名规则
文件名称 stm32f1xx_hal_ppp.(c/h) stm32f1xx_hal_ppp_ex.(c/h) 函数名 HAL_PPP_Function HAL_PPPEx_Function 外设句柄 PPP_HandleTypeDef 无 外设工作参数 初始化结构体 PPP_InitTypeDef PPP_InitTypeDef 配置参数结构体 PPP_ YyyyConfTypeDef PPP_ YyyyConfTypeDef 常用函数:
初始化/反初始化函数: HAL_PPP_Init(), HAL_PPP_DeInit()
外设读写函数: HAL_PPP_Read(), HAL_PPP_Write(), HAL_PPP_Transmit(), HAL_PPP_Receive()
控制函数: HAL_PPP_Set(), HAL_PPP_Get()
状态和错误: HAL_PPP_GetState(), HAL_PPP_GetError()
HAL库对寄存器位操作的相关宏定义:
宏定义结构 用途 __HAL_PPP_ENABLE_IT(__HANDLE__, __INTERRUPT__) 使能外设中断 __HAL_PPP_DISABLE_IT(__HANDLE__, __INTERRUPT__) 禁用外设中断 __HAL_PPP_GET_IT (__HANDLE__, __ INTERRUPT __) 获取外设某一中断源 __HAL_PPP_CLEAR_IT (__HANDLE__, __ INTERRUPT __) 清除外设中断 __HAL_PPP_GET_FLAG (__HANDLE__, __FLAG__) 获取外设的状态标记 __HAL_PPP_CLEAR_FLAG (__HANDLE__, __FLAG__) 清除外设的状态标记 __HAL_PPP_ENABLE(__HANDLE__) 使能某一外设 __HAL_PPP_DISABLE(__HANDLE__) 禁用某一外设 __HAL_PPP_XXXX (__HANDLE__, __PARAM__) 针对外设的特殊操作 ___HAL_PPP_GET_IT_SOURCE (__HANDLE__, __INTERRUPT __) 检查外设的中断源
HAL库对寄存器位操作的相关宏定义:
回调函数 | 举例 |
---|---|
HAL_PPP_MspInit() / _MspDeInit() | 举例: HAL_USART_MspInit() 会被HAL_PPP_Init() 函数调用,该函数主要用于存放外设使用到的GPIO、CLOCK、NVIC、DMA等初始化代码 |
HAL_PPP_ProcessCpltCallback | 举例: HAL_USART_TxCpltCallback 由外设中断或DMA中断调用,HAL库中断公共处理函数已经实现对中断标记位读取、判断和清除操作,用户只需要专注于中断逻辑功能的实现即可 |
HAL_PPP_ErrorCallback | 举例: HAL_USART_ErrorCallback 外设或DMA中断中发生的错误,用于发生错误处理 |
4. 新建HAL版本MDK工程
-
简要步骤:
-
新建工程文件夹
文件夹名称 作用 Drivers 存放与硬件相关的驱动层文件 Middlewares 存放正点原子提供的中间层组件文件和第三方中间层文件 Output 存放工程编译输出文件 Projects 存放 MDK 工程文件 User 存放HAL库用户配置文件、main.c、中断处理文件,以及分散加载文件 -
新建一个工程框架
- 新建工程
- 保存工程
- 选择主控芯片
- 删除文件夹
-
添加文件
- 设置工程名和分组名、
- 添加启动文件
- 添加User源码
- 添加SYSTEM源码
- 添加STM32F1xx_HAL_Driver源码
-
魔术棒配置
Target
选项卡:设置使用的编辑器版本、外部晶振频率Output
选项卡:设置Objects输出文件夹、生成.hex
文件、输出浏览信息Listing
选项卡:设置Listing输出文件夹C/C++
选项卡:设置全局宏定义、优化等级、C99 Mode、设置头文件包含路径Debug
选项卡:设置使用的仿真器类型,选择的下载接口等Utilities
选项卡:设置下载功能、下载算法、下载算法起始地址与大小等Linker
选项卡:添加分散加载文件( 北极星/MiniPro H750)
-
添加main.c文件
-
声明:资料来源(战舰STM32F103ZET6开发板资源包)
- Cortex-M3权威指南(中文).pdf
- STM32F10xxx参考手册_V10(中文版).pdf
- STM32F103 战舰开发指南V1.3.pdf
- STM32F103ZET6(中文版).pdf
- 战舰V4 硬件参考手册_V1.0.pdf