赞
踩
这是关于ST(STMicroelectronics)提供的三种不同的库的简要介绍:
标准外设库 (Standard Peripheral Libraries):
HAL库 (硬件抽象层,Hardware Abstraction Layer):
LL库 (Low Layer):
在选择库时,开发人员需要权衡易用性、兼容性、移植性和性能等方面的因素,以选择最适合其项目需求的库。
获取相关STM32Cube 官方固件包(F1/F4/F7/H7)的方法:
STM32Cube官网
路径:战舰 V4资料:资料→8,STM32 参考资料→1,STM32CubeXX固件包
在STM32的Drivers
文件夹中,有三个子文件夹,分别是BSP
、CMSIS
和STM32F1xx_HAL_Driver
。以下是它们的简要说明:
BSP (Board Support Package):
CMSIS (Cortex Microcontroller Software Interface Standard):
STM32F1xx_HAL_Driver:
这是关于 Middlewares
文件夹下的子文件夹的简要介绍:
ST:
STemWin:
STM32_USB_Device_Library:
STM32_USB_Host_Library:
Third_Party:
FatFs:
FreeRTOS:
LwIP:
在配置HAL库的用户配置文件时,一些关键的步骤和设置包括:
裁剪HAL库外设驱动源码:
设置外部高速晶振频率:
HSE_VALUE
宏定义,确保它与实际硬件一致。设置外部低速晶振频率:
LSE_VALUE
宏定义。以上步骤的具体实现可能因HAL库的版本而异。建议查阅HAL库的文档或相关参考资料,以获取详细的步骤和宏定义。一般来说,这些配置会在类似 stm32xxxx_hal_conf.h
这样的文件中进行。
在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库可能存在一些问题或不足之处,要有质疑的精神。查阅ST的官方文档、社区、以及其他开发者的经验,以了解潜在的问题和解决方案。
效率考虑: 一些HAL库提供的API函数可能效率较低,特别是对一些特殊需求的外设控制。在需要更高效率的场景下,可以考虑直接操作寄存器的方式,以减少函数调用的开销。
总体来说,HAL库是为了方便开发者快速上手和使用,但在一些特殊场景下,或者对性能要求较高的情况下,开发者可能需要深入了解硬件,直接操作寄存器或者考虑其他更底层的库。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。