嘗試使用Cube進行一些開發學習,這裏對此做一個梗概,先有一個全面的瞭解。
Cube全家桶
曾幾何時,ST剛推出CubeMX的時候,自動生成的外設初始化代碼都會有這樣那樣的錯誤,而如今,隨着軟件的迭代升級,Cube生態也越來越完善,並且使用也越來越方便,ST推出的STM32Cube Ecosystem提供了免費整套的開發軟件工具和嵌入式軟件包,其中可以從芯片的外設配置,程序開發,程序下載以及系統監視一系列的功能。如下圖所示;
- STM32 CubeMX 幾乎STM32的設備都可以使用這個工具初始化配置代碼,這個是基於Java開發的圖形化界面配置軟件,可以爲
Cortex-M
自動生成需要配置的C
代碼,還可以爲支持Linux
系統的Cortex-A
內核生成設備樹。 - STM32 CubeIDE 這是一款ST推出的免費的集成開發環境,基於Eclipse和GNU C/C++ 等開源工具鏈,可以編譯調試代碼,並且官方也將
STM32 CubeMX
集成到IDE
中,這樣整個軟件的配置和開發變得渾然一體,便捷非常。 - STM32CubeProgrammer 軟件編程工具,支持(JTAG,SWD,UART,USB DFU,I2C,SPI,CAN)等方式對設備和外部存儲器進行讀寫。
- STM32CubeMonitor 系列工具。強大的監視工具可幫助開發人員實時微調其應用程序的行爲和性能,這個目前還沒有嘗試,暫且先相信官方的自誇吧。
所以使用以上的ST Cube全家桶進行STM32的軟件開發,還是有不少坑要在實踐過程中慢慢爬,整體的一個流程基本如下;
- 第一步:使用
CubeMX
初始化相應的芯片外設功能等等; - 第二步:使用
CubeIDE
進行代碼編輯調試等操作,當然,如果你喜歡也可以使用IAR
,Keil
,或者VSCode
,這個完全出自個人喜好和習慣,但是據說CubeIDE
裏集成了CubeMX
,這個難道不香嗎? 加上如果想使用gcc
編譯器,那也省去了很多配置的麻煩; - 第三步:使用
CubeProgrammer
進行程序燒錄,主要是支持的協議多啊,還可以吧,感覺是吹的挺厲害的; - 第四步:以後可能會出更多的功能插件,目前感覺不是十分必要。
CubeMX
STM32 CubeMX的安裝,十分簡單,不過下載需要提交郵箱,基本根據系統提示就可以完成,另外,STM32 CubeMX目前自動生成的代碼支持官方的HAL庫和LL庫,像以前筆者常用的標準外設庫就已經被ST
拋棄了,最新的STM32F7已經不支持標準外設庫了。
同時,CubeMX初始化生成C代碼項目,最終的工程可以符合IAR
,Keil MDK
和GCC
,所以這裏相對來說比較方便,不用對着手冊擼寄存器了,也不用對着官方標準外設庫demo
進行移植,真的是哪裏不會點哪裏。
- HAL庫的封裝相對來說好一點,但是代碼讀起來相對比較冗雜,通用性和移植性好,符合軟件工程的設計思想,那麼會犧牲一點效率了。
- LL庫會再底層一點,這幾個的選擇還是看個人喜好和團隊的需要了。
CubeIDE
再官網下載CubeIDE
這個軟件並安裝,假設你已經成功安裝並打開了軟件,會看到;
這時候CubeIDE
已經集成了CubeMX
了,新建STM32
工程,step by step即可快速開始了。
CubeProg
整體看了一下 STM32 CubeProg 的介紹,其實有點還是可以的,首先這個軟件支持多平臺如:Windows, Linux, macOS等等,Java 進行開發的有點,這一系列差不多都是用Java
開發的吧,另外可能對st-link
的支持比較好,如果使用jlink
的話,用個openocd
也無妨,但是畢竟是套裝,下面簡單羅列一下;
- 支持擦除,讀寫Flash等等操作;
- 支持Motorola S19, HEX, ELF 和 二進制格式;
- ST-LINK的固件升級;
- 多平臺:Windows, Linux, macOS,其實就看好這一點;
結語
對於Cube進行了簡單的學習和介紹,目前還有不少坑要爬,建議看一下HAL
的封裝,有必要LL
也可以看看,基本上還是符合CMSIS那套標準。另外關於開發環境,如果需要使用CubeIDE
進行開發,它已經集成了CubeMAX
,則無需另外下載了,直接一站式服務搞定,如果只需要生成初始化代碼,那麼CubeMAX
還是有必要單獨裝一下的。