想要探究深入探讨HAL库与CMSIS的关系与协同工作机制,首先大家要知道什么是HAL库,什么是CMSIS。
一、什么是HAL库?
HAL库(Hardware Abstraction Layer)是一种硬件抽象层,主要用于简化与硬件的交互。它提供了一组API,使开发者可以在不直接操作硬件寄存器的情况下,控制和使用微控制器的外设。HAL库常用于嵌入式系统开发,尤其是在STM32等微控制器的开发中。
使用HAL库的优点包括:
易用性:开发者可以使用高层次的函数调用,而不需要深入了解底层硬件细节。
移植性:通过抽象硬件,代码可以更容易地在不同的硬件平台上移植。
减少错误:使用库函数可以降低因直接操作寄存器而导致的错误风险。
HAL库通常与其他库(如LL库)结合使用,以满足不同的开发需求。
其实一句话就可以概括: HAL 库就是函数的集合, HAL 库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。
二、什么是CMSIS?
CMSIS ( Cortex Microcontroller Software Interface Standard ),翻译过来是ARM Cortex™ 微控制器软件接口标准 。这个标准是谁提的呢?提的这个标准是用来干什么的呢?这里不得不说说ARM和STM32、TI这些公司的关系了,ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而TI、ST这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 Cortex M3 芯 片 ,他们的内核结构都是一样的,不同的是他们的存储器容量, 片上外设 IO 以及其他模块的区别。
标准是谁提的呢?ARM跟芯片厂商共同提出的,目的就是为了不同芯片厂商生产的Cortex-M3芯片能在软件上基本兼容,各芯片厂商就得按照这个标准去编写自己芯片内核的驱动程序,比如系统函数的命名、芯片初始化启动流程等;
这个标准是用来干什么的呢?如下图它向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。分为 3 个基本功能层:
核内外设访问层:ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。
中间件访问层:定义访问中间件的通用 API, 也是 ARM 公司提供。
外设访问层:定义硬件寄存器的地址以及外设的访问函数。
三、二者的协同工作
二者的关系
互补性:CMSIS为底层处理器提供了接口,而HAL库则在此基础上封装了外设控制。这意味着开发者可以利用CMSIS访问底层功能,同时使用HAL库与外设进行交互。
基础构建:HAL库的实现通常依赖于CMSIS提供的功能。例如,HAL库在初始化外设时可能会调用CMSIS的中断管理和时钟配置等功能。
协同工作机制
在实际开发中,HAL库和CMSIS协同工作的机制通常如下:
初始化阶段:
首先,CMSIS-Core会设置处理器的基本功能,比如中断向量表和系统时钟。
接着,HAL库会基于CMSIS提供的基础设施初始化外设,如GPIO、UART等。
操作阶段:
在应用程序中,开发者可以调用HAL库的API来控制外设,HAL库内部会利用CMSIS提供的功能来完成具体的操作。
例如,设置一个定时器时,HAL库可能会调用CMSIS的系统时钟配置来确保定时器的准确性。
中断处理:
当外设发生中断时,CMSIS会负责中断向量的管理,而HAL库会提供相应的中断服务例程(ISR),让开发者可以在ISR中处理具体的外设事件。
总结
通过结合CMSIS和HAL库,开发者可以在一个统一的框架内高效地进行嵌入式系统的开发,简化了代码的复杂性,提高了开发效率。同时,二者的协同工作为开发者提供了强大的功能支持,便于实现高效、可靠的嵌入式应用。