為什麼STM32的HAL庫那麼難用,ST還是要硬推HAL庫?

時間 2021-06-01 01:50:43

1樓:改名大師

先問是不是,再問為什麼。

我個人感覺hal相比寫暫存器好用太多,當然hal自己也有缺點,比如不夠抽象,比如一些引數型別不夠規範。

hal很符合人類的直覺,比如你想呼叫串列埠,輸入HAL_UART,語法補全裡就自動出現你想要的了。

實際上我甚至根本沒系統學過stm32開發,全靠編輯器的自動補全學的hal。

可能題主太侷限於暫存器了,HAL我個人甚至覺得還可以進一步進化到c++物件導向。

2樓:顧言

HAL庫好用是真的好用,但是這個是為提高你的開發效率的,並不是適合學習的。想學微控制器的話最好還是從標準庫開始,把暫存器怎麼回事搞明白了,再用HAL庫那也很容易了。

3樓:張公

覺得HAL庫難用的應該是沒有配合CubeMX這個軟體一起使用,配合使用的情況下,HAL庫就是開發神器。直接圖形化配置,外設全部自動初始化,完全不用手動操作。然後自動生成對應IDE的工程。

在我看來HAL庫唯一的缺點就是效率低,但是話又說回來,時間和效率敏感的應用,我都是用暫存器重寫的。至於資源占用大的問題,實話說std庫也沒小到哪兒去,專案如果真資源緊張,那麼應該優先考慮最新的LL庫而不是抱守古老的std庫。

4樓:flappypig

hal庫比標準庫更加抽象,也更加穩定,具有通用性,他f1f4f7等系列都是可以直接進行移植的。要是覺得太佔記憶體的話官方也推出了ll庫。

標準庫更加類似於入門剛學的51這種的開發方式,肯定會比hal庫更好理解與直觀,畢竟hal庫更接近cs的方向而不是純粹的微控制器開發。

5樓:

HAL庫做的更全。以前標準庫的思維是功能到位了就行。現在HAL庫的思維是不僅要求功能到位,異常處理也要到位,增加軟體可靠性。降低開發門檻。

也推出LL庫來讓喜歡DIY的人玩。

我覺得很不錯。

6樓:

個人覺得新人學習GPIO AFIO TIM EXTI I2C uart這些基礎的東西還是用暫存器好。 我現在寫完庫函式之後還是要看暫存器才感覺放心,之前做stm8的i2c案子,圖快用了庫函式,結果庫函式有個狀態判斷的函式有問題,搞了好久才找到原因。HAL的中斷的東西寫的真囉嗦!

完全背離了中斷的初衷。

7樓:方當瀚

像我從大學到現在工作,各種mcu linux驅動都幹過了之後,還是比較喜歡暫存器開發。寫驅動還是要對著暫存器看比較合適。

8樓:jasiachang

根本的考慮還是要降低嵌入式開發的門檻,讓有純cs基礎的大量人員較為容易地介入嵌入式開發。

hal的拖沓,就激勵st盡量推出更高主頻的mcu。

9樓:

不知道你說的標準庫是不是keil的標準庫。如果是,那ST推HAL也就很好理解了。

正是由於keil的標準庫好用,出於商業目的ST有必要搞一套更好配置,更適合新手的HAL庫。因為keil標準庫的封裝,使使用者開發的應用軟體和底層mcu實現了很好的隔離,也就是說上層對mcu的依賴很少。這時候使用者將產品從ST轉到nxp,gd,新唐之類的mcu方案,移植工作將大幅降低。

這對於ST現在的mcu市場占有率來說,為他人作嫁衣裳的場面是很難接受的。所以ST推HAL,也就很好理解了。

而對keil而言,arm的親兒子,無論用哪家的mcu,只要是arm核,都不虧,所以它是很有動力去推標準庫的。

對於開發者而言,如果是短期專案,哪個可以快速出產品就用哪個,對於長期專案,又有降成本壓力,標準庫是個不錯的選擇。

ARM程式設計是什麼,STM32又是什麼?

醜劍客 STM32 意法半導體生產的晶元,晶元內封裝了Cortex M3 內嵌的CPU 和一些外設。ARM程式設計 採用Cortex M3支援的ARM指令對Cortex M3程式設計,基於Cortex M3和STM32晶元手冊,通過暫存器 已對映為實體地址 訪問Cortex M3和STM32提供的外...

為什麼 STM32 暫存器版本的學習資料如此少見,而實驗室的老師都要求學習暫存器版本的?

rundstedt 如果完全沒有操作過暫存器的底子的話,了解暫存器還是非常必要的,不然出了問題你都不知道怎麼去查。如果有用過51的經驗,操作過暫存器,那就完全沒必要搞什麼暫存器版本。 默丶distance 個人不是相關專業,但做微控制器相關競賽,也算稍微了解微控制器。以下我的觀點 什麼都不會就hal...

STM32庫函式是什麼 有何意義

befreien 意義在於可以參考庫函式自己用暫存器加減化裁的重寫。庫函式為了復用通用搞得效率不咋地,再說用微控制器繞過暫存器心虛不虛? Ayaneru 除了原本類似於51的庫函式定義外,32的庫函式更為豐富,將專案的開發直接變為大部分呼叫庫函式,如51那樣直接操作暫存器的操作將被大大減少,基本都為...