想要探究深入探討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庫,開發者可以在一個統一的框架內高效地進行嵌入式系統的開發,簡化了代碼的復雜性,提高了開發效率。同時,二者的協同工作為開發者提供了強大的功能支持,便于實現高效、可靠的嵌入式應用。