认识HAL库(CMSIS、STM32Cube固件包、HAL库框架结构、使用HAL库、注意事项)

参考

http://t.csdnimg.cn/txzPo

一、初识HAL库

在这里插入图片描述

1.1、CMSIS简介

在这里插入图片描述

1.2、HAL库简介

在这里插入图片描述
这是关于ST(STMicroelectronics)提供的三种不同的库的简要介绍:

1.标准外设库 (Standard Peripheral Libraries):
兼容系列: F0/F1/F3/F2/F4/L1
特点: 该库早期由ST提供,用于支持多个STM32系列。然而,目前已经停止维护,因此不再推荐新项目使用。

2.HAL库 (硬件抽象层,Hardware Abstraction Layer):
兼容系列: HAL库是ST目前主推的库,适用于整个STM32系列。
特点: HAL库提供了更高层次的抽象,使用户更容易移植代码。它设计用于提供对硬件的标准化抽象,从而提高了代码的兼容性和易移植性。然而,由于其高层次的抽象,可能会导致一些性能损失。

3.LL库 (Low Layer):
兼容系列: 全系列兼容,与HAL库捆绑发布。
特点: LL库是HAL库的补充,提供了更底层的硬件访问接口。它的设计目标是在提供高度可移植性的同时,尽可能保持较高的效率。由于较低层次的硬件访问,LL库通常用于处理对性能和效率要求较高的任务,或者在HAL库中无法满足的特定硬件配置。

在选择库时,开发人员需要权衡易用性、兼容性、移植性和性能等方面的因素,以选择最适合其项目需求的库。

二、STM32Cube固件包浅析

在这里插入图片描述

2.1、如何获取STM32Cube固件包?

获取相关STM32Cube 官方固件包(F1/F4/F7/H7)的方法:
STM32Cube官网

2.2、STM32Cube固件包文件夹简介

在这里插入图片描述

Drivers文件夹

在这里插入图片描述
在STM32的Drivers文件夹中,有三个子文件夹,分别是BSP、CMSIS和STM32F1xx_HAL_Driver。以下是它们的简要说明:
1.BSP (Board Support Package):
作用: 用于适配ST官方的开发板。
详细: BSP文件夹包含了与特定开发板相关的驱动代码和配置文件,旨在提供对该开发板硬件的支持。这包括了针对LED、按键、显示屏等外设的配置和初始化代码。

2.CMSIS (Cortex Microcontroller Software Interface Standard):
作用: 符合CMSIS标准的组件。
详细: CMSIS文件夹中包含了符合CMSIS标准的组件,其中包括DSP库、Cortex-M内核及其设备文件、微控制器专用头文件、启动文件以及专用系统文件等。这些文件是为了提供与Cortex-M内核相关的标准化支持,以便在不同的开发环境中实现代码的可移植性。

3.STM32F1xx_HAL_Driver:
作用: HAL库外设驱动源码。
详细: 这个文件夹包含了STM32F1系列的HAL(Hardware Abstraction Layer)库源代码和头文件。HAL库是一个高度抽象的库,提供了与硬件外设的标准接口,使用户能够以更高级别的抽象编写代码,增加了可移植性和易用性。

Middlewares文件夹

在这里插入图片描述
这是关于 Middlewares 文件夹下的子文件夹的简要介绍:
ST:
1.STemWin:
作用: STemWin工具包,是ST提供的用于图形用户界面(GUI)开发的工具包。它包括一组图形库和相关的工具,帮助开发人员创建嵌入式系统上的图形界面。

2.STM32_USB_Device_Library:
作用: USB从机设备支持包。这是用于开发支持USB从机设备功能的库,允许STM32设备作为USB设备进行通信。

3.STM32_USB_Host_Library:
作用: USB主机设备支持包。这是用于开发支持USB主机设备功能的库,允许STM32设备与其他USB设备进行通信。

Third_Party:
1.FatFs:
作用: FAT文件系统支持包。FatFs是一个用于在嵌入式系统上实现FAT文件系统的开源库。

2.FreeRTOS:
作用: FreeRTOS实时系统支持包。FreeRTOS是一个用于嵌入式系统的开源实时操作系统内核,提供了任务调度、消息传递等功能。

3.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库的用户配置文件时,一些关键的步骤和设置包括:

1.裁剪HAL库外设驱动源码:
根据实际需求选择需要的外设驱动,可以在用户配置文件中通过宏定义的方式进行选择。不需要的外设驱动可以被裁剪,以减小代码体积。

2.设置外部高速晶振频率:
根据你的开发板使用的外部高速晶振的实际频率,更新HAL库的配置文件中的相关参数。这通常包括 HSE_VALUE 宏定义,确保它与实际硬件一致。

3.设置外部低速晶振频率:
如果你的系统中使用了外部低速晶振,同样需要在用户配置文件中设置相关的参数,通常是 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;  /* 返回函数状态 */ 
}

解释:
1.__HAL_FLASH_PREFETCH_BUFFER_ENABLE(): 该宏用于使能Flash预取缓冲,提高Flash读取效率。
2.HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2): 配置中断优先级分组。在这里,选择了分组2,这是HAL库中默认的中断优先级分组。
3.HAL_InitTick(TICK_INT_PRIORITY): 使用滴答定时器作为时钟基准,并配置1ms滴答。TICK_INT_PRIORITY 是滴答定时器中断的优先级。
4.HAL_MspInit(): 该函数用于初始化其他底层硬件,可能是一些与外设相关的底层初始化。需要用户自行实现该函数,以适应具体的硬件环境。
5.返回 HAL_OK,表示函数执行成功。

这个函数通常在程序的入口处被调用,用于初始化HAL库及相关的系统设置。

五、HAL库使用注意事项

在这里插入图片描述
这是一些使用HAL库时的一些建议和注意事项:
1.硬件问题排查: 如果在使用HAL库时遇到问题,首先应该检查硬件操作是否正确。参考芯片的数据手册和参考手册,确保硬件连接和配置正确。

2.不修改库源码: 尽量避免直接修改HAL库的源代码。这样可以确保在库更新时能够顺利进行升级,而不需要手动合并或修改新的库源码。

3.质疑精神: 有时候HAL库可能存在一些问题或不足之处,要有质疑的精神。查阅ST的官方文档、社区、以及其他开发者的经验,以了解潜在的问题和解决方案。

4.效率考虑: 一些HAL库提供的API函数可能效率较低,特别是对一些特殊需求的外设控制。在需要更高效率的场景下,可以考虑直接操作寄存器的方式,以减少函数调用的开销。

总体来说,HAL库是为了方便开发者快速上手和使用,但在一些特殊场景下,或者对性能要求较高的情况下,开发者可能需要深入了解硬件,直接操作寄存器或者考虑其他更底层的库。

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值