|
(一)開發(fā)方式
1.配置寄存器
2.庫(kù)函數(shù)
3.HAL庫(kù)
(二)庫(kù)函數(shù)與HAL庫(kù)對(duì)比
1.串口通信實(shí)驗(yàn)
2.庫(kù)函數(shù)與HAL庫(kù)比較
(三)總結(jié)
(一)開發(fā)方式
1.配置寄存器
很多人學(xué)習(xí)51單片機(jī)開發(fā)的時(shí)候,基本都是直接操作寄存器進(jìn)行單片機(jī)的控制,但是當(dāng)他們轉(zhuǎn)向STM32開發(fā)的時(shí)候,直接操作寄存器不是那么容易了,因?yàn)镾TM32的寄存器數(shù)量是51單片機(jī)的許多倍,開發(fā)時(shí)經(jīng)常需要翻查芯片的數(shù)據(jù)手冊(cè),此時(shí)直接操作寄存器就變得非常的費(fèi)力了。
但是寄存器是最接近硬件的部分,直接操作寄存器能夠很容易的實(shí)現(xiàn)自己想要的功能,并且遇到問(wèn)題時(shí)能夠知道是哪個(gè)寄存器的配置出現(xiàn)了問(wèn)題,這種開發(fā)方式雖然十分麻煩但卻讓人能夠深入理解單片機(jī)的運(yùn)行原理。
2.庫(kù)函數(shù)
由于寄存器開發(fā)難度很大,因此ST公司就專門編寫了芯片的庫(kù)函數(shù)(固件庫(kù)),將一些常用量的宏定義和一些外設(shè)也通過(guò)結(jié)構(gòu)體變量封裝起來(lái),如GPIO口時(shí)鐘等。所以我們只需要配置結(jié)構(gòu)體變量成員就可以修改外設(shè)的配置寄存器,從而選擇不同的功能。
標(biāo)準(zhǔn)外設(shè)庫(kù)(Standard Peripherals Library)是對(duì)STM32芯片的一個(gè)完整的封裝,包括所有標(biāo)準(zhǔn)器件外設(shè)的器件驅(qū)動(dòng)器。這應(yīng)該是目前使用最多的ST庫(kù),幾乎全部使用C語(yǔ)言實(shí)現(xiàn)。但是,標(biāo)準(zhǔn)外設(shè)庫(kù)也是針對(duì)某一系列芯片而言的,沒(méi)有可移植性。
3.HAL庫(kù)
HAL(HardwareAbstraction Layer)是硬件的抽象層,它表現(xiàn)出更高的抽象整合水平,HAL API集中關(guān)注各外設(shè)的公共函數(shù)功能,這樣便于定義一套通用的對(duì)用戶友好的API函數(shù)接口,從而可以輕松實(shí)現(xiàn)從一個(gè)STM32產(chǎn)品移植到另一個(gè)不同的STM32系列產(chǎn)品。下圖是HAL庫(kù)的整體框架。
HAL庫(kù)是ST未來(lái)主推的庫(kù),從前年開始ST新出的芯片已經(jīng)沒(méi)有STD庫(kù)了,比如F7系列。現(xiàn)在,ST主推HAL庫(kù),目前,HAL庫(kù)已經(jīng)支持STM32全線產(chǎn)品。總的來(lái)說(shuō),HAL庫(kù)相對(duì)于庫(kù)函數(shù)層次架構(gòu)更加清晰,更加抽象。
(二)庫(kù)函數(shù)與HAL庫(kù)對(duì)比
1.串口通信實(shí)驗(yàn)
庫(kù)函數(shù)主要代碼
HAL庫(kù)主要代碼
2.庫(kù)函數(shù)與HAL庫(kù)比較
庫(kù)函數(shù)配置好串口以后,當(dāng)串口接收到數(shù)據(jù)再發(fā)送給上位機(jī)時(shí)需要循環(huán)發(fā)送,但是HAL庫(kù)就直接調(diào)用HAL_UART_Transmit函數(shù)就能直接將串口的數(shù)據(jù)發(fā)給上位機(jī)。
庫(kù)函數(shù)的串口通信函數(shù)只適用于STM32F1系列,對(duì)于其他系列的就不能通用了;但是對(duì)于HAL庫(kù)來(lái)說(shuō),只要外設(shè)相同,基本上能夠很容易的移植。
(三)總結(jié)
通過(guò)比較STM32庫(kù)函數(shù)和HAL庫(kù)的開發(fā)方式,庫(kù)函數(shù)和HAL庫(kù)其實(shí)本質(zhì)上都是將STM32的底層的寄存器進(jìn)行封裝并向用戶提供友好的接口,這都極大的降低了用戶的開發(fā)門檻。但是相對(duì)于庫(kù)函數(shù)來(lái)說(shuō),HAL庫(kù)更加“通用”,能夠較好的移植到其他的芯片上去,但也正是這樣,導(dǎo)致其代碼比較龐大、執(zhí)行效率比較低的結(jié)果。總的來(lái)說(shuō),HAL庫(kù)相對(duì)于庫(kù)函數(shù)更加友好,能夠讓用戶將精力放在開發(fā)的產(chǎn)品上而不是怎么實(shí)現(xiàn)。
|
|