二、STM32——项目文件结构分析
1 HAL库和标准库区别
HAL库(Hardware Abstraction Layer,硬件抽象层) 和 标准库(Standard Peripheral Library,标准外设库,又称为SPL) 都是STM32微控制器的固件库。它们的主要区别在于结构和抽象的级别。
-
HAL 库: HAL 库是 STMicroelectronics(ST)提供的较新的库。它提供了一套统一的 API,用于访问 STM32 系列微控制器的外设。HAL 库的目的是简化固件开发,让开发者更加关注应用层逻辑,而无需深入了解底层硬件。
HAL 库的特点:
-
跨平台支持:支持 STM32 全系列微控制器。
-
结构统一:为所有外设提供统一的 API 和驱动结构。
-
易于使用:简化了许多硬件操作,使得开发者可以快速上手。
-
与 STM32CubeMX 工具集成:STM32CubeMX 可以自动生成 HAL 库的初始代码,方便开发者配置硬件。
-
-
标准库(SPL):标准库是 STMicroelectronics(ST)较早推出的库,提供了访问 STM32 外设的底层驱动。它在设计上更接近寄存器操作,为开发者提供了更多的控制权,但是相对复杂一些。(已经停止维护)
标准库的特点:
-
针对特定平台:针对不同的 STM32 系列提供相应的库。
-
底层驱动:为外设提供底层的驱动接口,更接近硬件操作。
-
控制精细:提供了更多的硬件控制选项,但相应地要求开发者具备较高的硬件知识。
-
学习曲线较陡:由于其底层性质,开发者需要花费更多的时间学习和理解。
-
总结: HAL 库和标准库都可以实现 STM32 的固件开发,但它们具有不同的抽象级别和设计哲学。HAL 库更加易于使用,与 STM32CubeMX 工具集成,并支持跨平台开发。相比之下,标准库提供了更底层的硬件控制,但学习曲线较陡。根据开发者的经验和项目需求,可以选择适合的库进行开发。
2 CMSIS
CMSIS 标准英文全称是 Cortex MicroControllerSoftware Interface Standard
,意思就是ARM Cortex微控制器软件接口标准。
由于基于 Cortex 核的芯片厂商很多,不只是 ST 公司,为了解决不同厂家的对 Cortex 芯片核心软件兼容问题,ARM制定公司就和这些厂家建立了这套 CMSIS
标准。
CMSIS 处于中间层,向上提供给用户程序和实时操作系统所需的函数接口,向下负责与内核和其他外设通信。我认为可以理解就是:库函数如何定义,寄存器操作定义,系统初始化函数定义
假如没有CMSIS 标准,基于Cortex 的芯片厂商就会设计出自己喜欢的风格库函数。因此CMSIS 标准就是要强制他们必须按照这个标准来设计
在CMSIS 框架内又分为3 个基本功能层:
-
核内外设访问层:ARM 公司提供的访问,定义处理器内部寄存器地址 以及功能函数。
-
中间件访问层:定义访问中间件的通用API,由ARM 提供,芯片厂商 根据需要更新。
-
外设访问层:定义硬件寄存器的地址以及外设的访问函数,比如ST 公司提供的固件库外设驱动文件(stm32f10x_gpio.c 等文件)就是在这个访问 层。
CMSIS 就是统一各芯片厂商固件库内函数的名称,比如在系统初始化的时候使用的是SystemInit 这个函数名,那么CMSIS 标准就是强制所有使用Cortex 核设计芯片的厂商内固件库系统初始化函数必须为这个名字,不能修改。又比如对GPIO 口输出操作的函数:GPIO_SetBits,此函数名也是不能随便定义的。