STM32 HAL固件庫(kù)編程的文件構(gòu)架
對(duì)于我這種以前只接觸過(guò)51和AVR單片機(jī)編程的小菜來(lái)說(shuō),現(xiàn)在開始學(xué)習(xí)STM32的編程,對(duì)于函數(shù)的功能以及C語(yǔ)言的語(yǔ)法都還好理解,難的是它提供的那一套硬件抽象層(HAL)驅(qū)動(dòng)是怎么和其他的東東搭配在一起組成一個(gè)又一個(gè)的工程。
首先上兩張從ST官方提供的HAL固件庫(kù)文檔截圖
從這兩張圖的話,能對(duì)它的構(gòu)架看出個(gè)一二,下面稍稍具體一點(diǎn)分析
HAL固件庫(kù)編程,它的文件組織大致分三個(gè)部分
- HAL驅(qū)動(dòng)
- CMSIS驅(qū)動(dòng)
- 用戶編寫程序
而假如你使用的是ST官網(wǎng)的開發(fā)板,那么你還有一套現(xiàn)成的驅(qū)動(dòng)可供使用,板級(jí)支持包(BSP),那么正好向我一樣,但是,我不太喜歡使用這個(gè)東西,能自己寫還是自己寫的好。
HAL驅(qū)動(dòng)毫無(wú)疑問(wèn)就是ST提供的一些包裝好的硬件抽象層的驅(qū)動(dòng),這個(gè)就是ST提供的利器,必須有,不用是不可能的。CMSIS的話,這個(gè)大概是ARM內(nèi)核相關(guān)的一些驅(qū)動(dòng)吧,這個(gè)一般我們編程都操縱不到,我們大部分都是調(diào)用HAL的程序。除了這兩個(gè)必須有的,當(dāng)然主函數(shù)也是必須有的,還有其他的一些東東,這些還比較多,但都可以自己參照ST給的例程或是模板自己從零開始寫。
下面就其中一些用戶配置,但涉及到驅(qū)動(dòng)的文件做一些說(shuō)明。
有一個(gè)stm32f3xx_hal_conf.h(以F3系列為例說(shuō)明)的HAL驅(qū)動(dòng)配置文件,這個(gè)究竟是算HAL驅(qū)動(dòng)還是用戶自定義文件呢,我更偏向于后者。在固件庫(kù)中會(huì)模板,可以去修改里面的內(nèi)容,我就喜歡自己從頭寫,東西也不多,但是現(xiàn)在自己寫還不成功,再看看,這塊應(yīng)該問(wèn)題不大。
stm32f3xx_it.c,這個(gè)文件在模板給的文件里有,但是東西不是很多,看名字就知道這個(gè)是和中斷有關(guān),對(duì)于我的現(xiàn)階段,用到的中斷不多,用到就自己寫就好了。
startup_xxx就是以startup開頭的一個(gè)什么文件,這個(gè)貌似是整個(gè)工程的起始文件,默認(rèn)是放在CMSIS下,還是一個(gè).s類型的文件。
有個(gè)system什么的文件,它也是包含在CMSIS下的,這個(gè)和上一個(gè)的文件都比較特殊吧,不過(guò)好在這兩都不用我們?nèi)バ薷?,只要到?duì)應(yīng)的文件夾下拷貝出來(lái)就好了。
總之,就是分三部分,CMSIS,HAL和用戶自定義文件,這不管是在文件夾組織,還是在工程結(jié)構(gòu)組織上都可以按照這個(gè)邏輯。