一、初识HAL库
- 1.1、CMSIS简介
- 1.2、HAL库简介
二、STM32Cube固件包浅析
- 2.1、如何获取STM32Cube固件包?
- 2.2、STM32Cube固件包文件夹简介
- 2.3、CMSIS文件夹关键文件
三、HAL库框架结构
- 3.1、HAL库文件夹结构
- 3.2、HAL库文件介绍
- 3.3、HAL库API函数和变量命名规则
四、如何使用HAL库
- 4.1、基于CMSIS应用程序文件描述
- 4.2、HAL 库的用户配置文件
- 4.3、stm32f1xx_hal.c 文件
五、HAL库使用注意事项
六、总结
一、初识HAL库
1.1、CMSIS简介
1.2、HAL库简介
这是关于ST(STMicroelectronics)提供的三种不同的库的简要介绍:
-
标准外设库 (Standard Peripheral Libraries):
- 兼容系列: F0/F1/F3/F2/F4/L1
- 特点: 该库早期由ST提供,用于支持多个STM32系列。然而,目前已经停止维护,因此不再推荐新项目使用。
-
HAL库 (硬件抽象层,Hardware Abstraction Layer):
- 兼容系列: HAL库是ST目前主推的库,适用于整个STM32系列。
- 特点: HAL库提供了更高层次的抽象,使用户更容易移植代码。它设计用于提供对硬件的标准化抽象,从而提高了代码的兼容性和易移植性。然而,由于其高层次的抽象,可能会导致一些性能损失。
-
LL库 (Low Layer):
- 兼容系列: 全系列兼容,与HAL库捆绑发布。
- 特点: LL库是HAL库的补充,提供了更底层的硬件访问接口。它的设计目标是在提供高度可移植性的同时,尽可能保持较高的效率。由于较低层次的硬件访问,LL库通常用于处理对性能和效率要求较高的任务,或者在HAL库中无法满足的特定硬件配置。
在选择库时,开发人员需要权衡易用性、兼容性、移植性和性能等方面的因素,以选择最适合其项目需求的库。
二、STM32Cube固件包浅析
2.1、如何获取STM32Cube固件包?
获取相关STM32Cube 官方固件包(F1/F4/F7/H7)的方法:
STM32Cube官网
路径:战舰 V4资料:资料→8,STM32 参考资料→1,STM32CubeXX固件包
2.2、STM32Cube固件包文件夹简介
Drivers文件夹
在STM32的Drivers
文件夹中,有三个子文件夹,分别是BSP
、CMSIS
和STM32F1xx_HAL_Driver
。以下是它们的简要说明:
-
BSP (Board Support Package):
- 作用: 用于适配ST官方的开发板。
- 详细: BSP文件夹包含了与特定开发板相关的驱动代码和配置文件,旨在提供对该开发板硬件的支持。这包括了针对LED、按键、显示屏等外设的配置和初始化代码。
-
CMSIS (Cortex Microcontroller Software Interface Standard):
- 作用: 符合CMSIS标准的组件。
- 详细: CMSIS文件夹中包含了符合CMSIS标准的组件,其中包括DSP库、Cortex-M内核及其设备文件、微控制器专用头文件、启动文件以及专用系统文件等。这些文件是为了提供与Cortex-M内核相关的标准化支持,以便在不同的开发环境中实现代码的可移植性。
-
STM32F1xx_HAL_Driver:
- 作用: HAL库外设驱动源码。
- 详细: 这个文件夹包含了STM32F1系列的HAL(Hardware Abstraction Layer)库源代码和头文件。HAL库是一个高度抽象的库,提供了与硬件外设的标准接口,使用户能够以更高级别的抽象编写代码,增加了可移植性和易用性。
Middlewares文件夹
这是关于 Middlewares
文件夹下的子文件夹的简要介绍:
ST:
-
STemWin:
- 作用: STemWin工具包,是ST提供的用于图形用户界面(GUI)开发的工具包。它包括一组图形库和相关的工具,帮助开发人员创建嵌入式系统上的图形界面。
-
STM32_USB_Device_Library:
- 作用: USB从机设备支持包。这是用于开发支持USB从机设备功能的库,允许STM32设备作为USB设备进行通信。
-
STM32_USB_Host_Library:
- 作用: USB主机设备支持包。这是用于开发支持USB主机设备功能的库,允许STM32设备与其他USB设备进行通信。
Third_Party:
-
FatFs:
- 作用: FAT文件系统支持包。FatFs是一个用于在嵌入式系统上实现FAT文件系统的开源库。
-
FreeRTOS:
- 作用: FreeRTOS实时系统支持包。FreeRTOS是一个用于嵌入式系统的开源实时操作系统内核,提供了任务调度、消息传递等功能。
-
LwIP:
- 作用: LwIP网络通信协议支持包。LwIP(轻型IP)是一个用于嵌入式系统的开源TCP/IP协议栈,用于支持网络通信。
2.3、CMSIS文件夹关键文件
CMSIS标准规定软件包目录
Device和Include文件夹的关键文件介绍
三、HAL库框架结构
3.1、HAL库文件夹结构
3.2、HAL库文件介绍
3.3、HAL库API函数和变量命名规则
HAL库对寄存器位操作的相关宏定义
HAL库回调函数
四、如何使用HAL库
4.1、基于CMSIS应用程序文件描述
STM32开发文件结构分布
4.2、HAL 库的用户配置文件
在配置HAL库的用户配置文件时,一些关键的步骤和设置包括:
-
裁剪HAL库外设驱动源码:
- 根据实际需求选择需要的外设驱动,可以在用户配置文件中通过宏定义的方式进行选择。不需要的外设驱动可以被裁剪,以减小代码体积。
-
设置外部高速晶振频率:
- 根据你的开发板使用的外部高速晶振的实际频率,更新HAL库的配置文件中的相关参数。这通常包括
HSE_VALUE
宏定义,确保它与实际硬件一致。
- 根据你的开发板使用的外部高速晶振的实际频率,更新HAL库的配置文件中的相关参数。这通常包括
-
设置外部低速晶振频率:
- 如果你的系统中使用了外部低速晶振,同样需要在用户配置文件中设置相关的参数,通常是
LSE_VALUE
宏定义。
- 如果你的系统中使用了外部低速晶振,同样需要在用户配置文件中设置相关的参数,通常是
以上步骤的具体实现可能因HAL库的版本而异。建议查阅HAL库的文档或相关参考资料,以获取详细的步骤和宏定义。一般来说,这些配置会在类似 stm32xxxx_hal_conf.h
这样的文件中进行。
4.3、stm32f1xx_hal.c 文件
在stm32f1xx_hal.c
文件中的HAL_Init
函数,用于初始化HAL库。下面是对这个函数的主要步骤的解释:
HAL_StatusTypeDef HAL_Init(void)
{
__HAL_FLASH_PREFETCH_BUFFER_ENABLE(); /* 使能FLASH预取缓冲 */
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); /* 配置中断优先级分组 */
/* 使用滴答定时器作为时钟基准,配置 1ms 滴答(重置后默认的时钟源为 HSI) */
HAL_InitTick(TICK_INT_PRIORITY);
HAL_MspInit(); /* 初始化其它底层硬件(如果必要) */
return HAL_OK; /* 返回函数状态 */
}
解释:
-
__HAL_FLASH_PREFETCH_BUFFER_ENABLE()
: 该宏用于使能Flash预取缓冲,提高Flash读取效率。 -
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2)
: 配置中断优先级分组。在这里,选择了分组2,这是HAL库中默认的中断优先级分组。 -
HAL_InitTick(TICK_INT_PRIORITY)
: 使用滴答定时器作为时钟基准,并配置1ms滴答。TICK_INT_PRIORITY
是滴答定时器中断的优先级。 -
HAL_MspInit()
: 该函数用于初始化其他底层硬件,可能是一些与外设相关的底层初始化。需要用户自行实现该函数,以适应具体的硬件环境。 -
返回
HAL_OK
,表示函数执行成功。
这个函数通常在程序的入口处被调用,用于初始化HAL库及相关的系统设置。
五、HAL库使用注意事项
这是一些使用HAL库时的一些建议和注意事项:
-
硬件问题排查: 如果在使用HAL库时遇到问题,首先应该检查硬件操作是否正确。参考芯片的数据手册和参考手册,确保硬件连接和配置正确。
-
不修改库源码: 尽量避免直接修改HAL库的源代码。这样可以确保在库更新时能够顺利进行升级,而不需要手动合并或修改新的库源码。
-
质疑精神: 有时候HAL库可能存在一些问题或不足之处,要有质疑的精神。查阅ST的官方文档、社区、以及其他开发者的经验,以了解潜在的问题和解决方案。
-
效率考虑: 一些HAL库提供的API函数可能效率较低,特别是对一些特殊需求的外设控制。在需要更高效率的场景下,可以考虑直接操作寄存器的方式,以减少函数调用的开销。
总体来说,HAL库是为了方便开发者快速上手和使用,但在一些特殊场景下,或者对性能要求较高的情况下,开发者可能需要深入了解硬件,直接操作寄存器或者考虑其他更底层的库。文章来源:https://www.toymoban.com/news/detail-832177.html
六、总结
文章来源地址https://www.toymoban.com/news/detail-832177.html
到了这里,关于【正点原子STM32】认识HAL库(CMSIS、STM32Cube固件包、HAL库框架结构、使用HAL库、注意事项)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!