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