當(dāng)前位置:首頁 > 學(xué)習(xí)資源 > 講師博文 > 深入探討HAL庫與CMSIS的關(guān)系與協(xié)同工作機(jī)制
想要探究深入探討HAL庫與CMSIS的關(guān)系與協(xié)同工作機(jī)制,首先大家要知道什么是HAL庫,什么是CMSIS。
一、什么是HAL庫?
HAL庫(Hardware Abstraction Layer)是一種硬件抽象層,主要用于簡化與硬件的交互。它提供了一組API,使開發(fā)者可以在不直接操作硬件寄存器的情況下,控制和使用微控制器的外設(shè)。HAL庫常用于嵌入式系統(tǒng)開發(fā),尤其是在STM32等微控制器的開發(fā)中。
使用HAL庫的優(yōu)點(diǎn)包括:
易用性:開發(fā)者可以使用高層次的函數(shù)調(diào)用,而不需要深入了解底層硬件細(xì)節(jié)。
移植性:通過抽象硬件,代碼可以更容易地在不同的硬件平臺(tái)上移植。
減少錯(cuò)誤:使用庫函數(shù)可以降低因直接操作寄存器而導(dǎo)致的錯(cuò)誤風(fēng)險(xiǎn)。
HAL庫通常與其他庫(如LL庫)結(jié)合使用,以滿足不同的開發(fā)需求。
其實(shí)一句話就可以概括: HAL 庫就是函數(shù)的集合, HAL 庫函數(shù)的作用是向下負(fù)責(zé)與寄存器直接打交道,向上提供用戶函數(shù)調(diào)用的接口(API)。
二、什么是CMSIS?
CMSIS ( Cortex Microcontroller Software Interface Standard ),翻譯過來是ARM Cortex™ 微控制器軟件接口標(biāo)準(zhǔn) 。這個(gè)標(biāo)準(zhǔn)是誰提的呢?提的這個(gè)標(biāo)準(zhǔn)是用來干什么的呢?這里不得不說說ARM和STM32、TI這些公司的關(guān)系了,ARM 是一個(gè)做芯片標(biāo)準(zhǔn)的公司,它負(fù)責(zé)的是芯片內(nèi)核的架構(gòu)設(shè)計(jì),而TI、ST這樣的公司,他們并不做標(biāo)準(zhǔn),他們是芯片公司,他們是根據(jù) ARM 公司提供的芯片內(nèi)核標(biāo)準(zhǔn)設(shè)計(jì)自己的芯片。所以,任何一個(gè)做 Cortex M3 芯 片 ,他們的內(nèi)核結(jié)構(gòu)都是一樣的,不同的是他們的存儲(chǔ)器容量, 片上外設(shè) IO 以及其他模塊的區(qū)別。
標(biāo)準(zhǔn)是誰提的呢?ARM跟芯片廠商共同提出的,目的就是為了不同芯片廠商生產(chǎn)的Cortex-M3芯片能在軟件上基本兼容,各芯片廠商就得按照這個(gè)標(biāo)準(zhǔn)去編寫自己芯片內(nèi)核的驅(qū)動(dòng)程序,比如系統(tǒng)函數(shù)的命名、芯片初始化啟動(dòng)流程等;
這個(gè)標(biāo)準(zhǔn)是用來干什么的呢?如下圖它向下負(fù)責(zé)與內(nèi)核和各個(gè)外設(shè)直接打交道,向上提供實(shí)時(shí)操作系統(tǒng)用戶程序調(diào)用的函數(shù)接口。分為 3 個(gè)基本功能層:
核內(nèi)外設(shè)訪問層:ARM 公司提供的訪問,定義處理器內(nèi)部寄存器地址以及功能函數(shù)。
中間件訪問層:定義訪問中間件的通用 API, 也是 ARM 公司提供。
外設(shè)訪問層:定義硬件寄存器的地址以及外設(shè)的訪問函數(shù)。
三、二者的協(xié)同工作
二者的關(guān)系
互補(bǔ)性:CMSIS為底層處理器提供了接口,而HAL庫則在此基礎(chǔ)上封裝了外設(shè)控制。這意味著開發(fā)者可以利用CMSIS訪問底層功能,同時(shí)使用HAL庫與外設(shè)進(jìn)行交互。
基礎(chǔ)構(gòu)建:HAL庫的實(shí)現(xiàn)通常依賴于CMSIS提供的功能。例如,HAL庫在初始化外設(shè)時(shí)可能會(huì)調(diào)用CMSIS的中斷管理和時(shí)鐘配置等功能。
協(xié)同工作機(jī)制
在實(shí)際開發(fā)中,HAL庫和CMSIS協(xié)同工作的機(jī)制通常如下:
初始化階段:
首先,CMSIS-Core會(huì)設(shè)置處理器的基本功能,比如中斷向量表和系統(tǒng)時(shí)鐘。
接著,HAL庫會(huì)基于CMSIS提供的基礎(chǔ)設(shè)施初始化外設(shè),如GPIO、UART等。
操作階段:
在應(yīng)用程序中,開發(fā)者可以調(diào)用HAL庫的API來控制外設(shè),HAL庫內(nèi)部會(huì)利用CMSIS提供的功能來完成具體的操作。
例如,設(shè)置一個(gè)定時(shí)器時(shí),HAL庫可能會(huì)調(diào)用CMSIS的系統(tǒng)時(shí)鐘配置來確保定時(shí)器的準(zhǔn)確性。
中斷處理:
當(dāng)外設(shè)發(fā)生中斷時(shí),CMSIS會(huì)負(fù)責(zé)中斷向量的管理,而HAL庫會(huì)提供相應(yīng)的中斷服務(wù)例程(ISR),讓開發(fā)者可以在ISR中處理具體的外設(shè)事件。
總結(jié)
通過結(jié)合CMSIS和HAL庫,開發(fā)者可以在一個(gè)統(tǒng)一的框架內(nèi)高效地進(jìn)行嵌入式系統(tǒng)的開發(fā),簡化了代碼的復(fù)雜性,提高了開發(fā)效率。同時(shí),二者的協(xié)同工作為開發(fā)者提供了強(qiáng)大的功能支持,便于實(shí)現(xiàn)高效、可靠的嵌入式應(yīng)用。