2018年9月27日 星期四

STM32 SPL/HAL/LL Driver的差異

相信使用STM32的人都有一些疑問,就是為何有CMSIS/SPL/HAL/LL這麼多種Driver or Library, 其實都是以CMSIS為基礎建構上去,差異就是低階高階之間的分別而已,以下大致對這幾種Libraries做簡單的敘述!

CMSIS
雖然使用ARM Cortex系列的人可能都知道CMSIS, 以下是節錄ARM KEIL官網上的敘述:The Cortex Microcontroller Software Interface Standard (CMSIS) provides a software framework for embedded applications that run on Cortex-M based microcontrollers and Cortex-A5/A7/A9 based processors. CMSIS was started in 2008. It is a close cooperation with various silicon and software vendors.CMSIS enables consistent and simple software interfaces to the processor and the peripherals, simplifying software reuse, reducing the learning curve for microcontroller developers.


SPL
參考成大資工的http://wiki.csie.ncku.edu.tw/embedded/Lab19/stm32-prog.pdf這篇文章中有以下敘述:ST 提供的標準週邊硬體函式庫是完全符合 CMSIS(Cotex Microcontroller Software Interface Standard)的。CMSIS 是 ARM 公司針對 CortexM 系列處理器定義的一個與晶片製造 商無關的,獨立的硬體抽象層,基於符合CMSIS 的韌體函式庫開發程式,程式碼復用的好處是顯而易見的。只要其它晶片供應商的 CortexM 處理器也提供符合 CMSIS 的韌體函式庫,我們基於 STMicroelectronics的韌體函式庫開發的程式就很容易移植過去。

在STM32CubeMX這套軟體另外為STM32提供了HAL Driver(hardware abstraction layer)及LL Driver(low layer)來讓使用者可以更迅速的建立初始化的程式,HAL更提供了更高階的APIs可以呼叫與可攜性,脫離硬體的思維,讓韌體設計者可以更快速的開發應用程式,不必去煩惱如何設定站存器與如何設定硬體工作等繁雜的事情;而LL Driver則提供低階的APIs(register level),讓使用者可以設定硬體最佳化但可攜性較差,而且需要對MCU硬體架構更加了解!

在STM32CubeMX這套軟體當中,可以透過Project Settings選擇是要使用HAL or LL Driver,讓程式更有效率或彈性


二維陣列指標的表示方法