stm32下標準庫函式與HAL庫函式程式設計方式的差異

2021-10-12 02:37:30 字數 1660 閱讀 8596

由於暫存器開發難度很大,因此st公司就專門編寫了晶元的庫函式(韌體庫),將一些常用量的巨集定義和一些外設也通過結構體變數封裝起來,如gpio口時鐘等。所以我們只需要配置結構體變數成員就可以修改外設的配置暫存器,從而選擇不同的功能。

標準外設庫(standard peripherals library)是對stm32晶元的乙個完整的封裝,包括所有標準器件外設的器件驅動器。這應該是目前使用最多的st庫,幾乎全部使用c語言實現。但是,標準外設庫也是針對某一系列晶元而言的,沒有可移植性

hal(hardware abstraction layer)是硬體的抽象層,它表現出更高的抽象整合水平,hal api集中關注各外設的公共函式功能,這樣便於定義一套通用的對使用者友好的api函式介面,從而可以輕鬆實現從乙個stm32產品移植到另乙個不同的stm32系列產品。下圖是hal庫的整體框架。

hal庫是st未來主推的庫,從前年開始st新出的晶元已經沒有std庫了,比如f7系列。現在,st主推hal庫,目前,hal庫已經支援stm32全線產品。總的來說,hal庫相對於庫函式層次架構更加清晰,更加抽象。

標準庫函式:

char stop=

; u16 t;

u16 len;

u16 times=0;

delay_init()

;//ñó걺¯êý³õê¼»¯

nvic_prioritygroupconfig

(nvic_prioritygroup_2)

;//éèöãnvicöð¶ï·ö×é2:2î»çàõ¼óåï輶£¬2î»ïìó¦óåï輶

uart_init

(115200);

//´®¿ú³õê¼»¯îª115200

led_init()

;//led¶ë¿ú³õê¼»¯

key_init()

;//³õê¼»¯óë°´¼üᬽóµäó²¼þ½ó¿ú

while

(a)}

for(t=

0;t)printf

("\r\n\r\n");

//²åèë»»ðð

usart_rx_sta=0;

}

hal庫函式:

hal_init()

;stm32_clock_init

(rcc_pll_mul9)

;delay_init(72

);uart_init

(115200);

led_init()

;key_init()

;while(1

)else

}

通過比較stm32庫函式和hal庫的開發方式,庫函式和hal庫其實本質上都是將stm32的底層的暫存器進行封裝並向使用者提供友好的介面,這都極大的降低了使用者的開發門檻。但是相對於庫函式來說,hal庫更加「通用」,能夠較好的移植到其他的晶元上去,但也正是這樣,導致其**比較龐大、執行效率比較低的結果。總的來說,hal庫相對於庫函式更加友好,能夠讓使用者將精力放在開發的產品上。

該平台**為

是一款面向32位處理器快速入門學習的整合開發平台

它的好處是免費、高效、開源等,操作介面簡潔,易上手。

STM32鍵盤 庫函式

昨天晚上老大回來看我頻繁使用暫存器寫程式給出指點,告訴我盡量使用庫函式,少使用暫存器,畢竟暫存器在後面使用的時候還要乙個乙個查詢手冊可能太麻煩了,nice!這次使用庫函式操作鍵盤,很基礎的實驗,其中摻雜了之前的蜂鳴器和led內容。感覺基礎鍵盤實驗比較有價值的還是那個鍵盤操作函式,以下給出標準模板,m...

stm32 按鍵(庫函式版)

不得不說程序太慢了 感覺很慌 但是幹什麼事情又非常的從容 學的很慢學著學著發現 不止是要學新東西 那些 以前早該知道的東西也忘了好多 還有 一定一定要好好學習 擴充套件知識面 什麼東西都一定要學精 因為知識的封鎖真的真的很可怕 很可怕 所以一定多學習 多動手 要加油 終於可以看這個的重點了 按鍵 就...

STM32 庫函式流水燈程式

我用的stm32f103zet6晶元 led給0亮 先在新建好的專案資料夾syste裡建乙個led資料夾用於存放led.c和led.h 如 接下來直接看 吧!main.c include sys.h include delay.h include led.h intmain void led.c i...