由於暫存器開發難度很大,因此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...