stm32.cube(七)——arm-gcc.helloworld
對與MDK-ARM(keil),EWARM(IAR)和TureSTUDIO(Atollic)這三個ARM常用IDE工具,在cube包里都有對應(yīng)的例子。
而對于arm-gcc,cube里只提供了例程的源碼。由于需要自己寫Makefile,因此比起各種IDE來說,配置的復(fù)雜度要更高一點。
二、cube.gcc項目建立過程2.1 移植代碼根據(jù)實際應(yīng)用,拷貝需要用到的HAL、BSP、CMSIS、middleware、RTOS代碼到工程文件夾。
比如一個項目用到了觸屏,就從middleware目錄下拷貝STemWin。
用到的芯片peripheral,就從HAL目錄下拷貝相應(yīng)的hal_xxx_xxx.c和hal_xxx_xxx.h。
建立一個APP文件夾,用來存放我們自己編寫的應(yīng)用層代碼。最好先寫個簡單的測試函數(shù),因為沒有main函數(shù)就無法編譯出Flash固件。
2.2 修改配置文件HAL層和middleware目錄下都有一個xxx_conf_template.h文件。把它修改成xxx_conf.h就是該模塊的默認配置文件。然后需要再對它進行編輯,設(shè)置每個模塊的配置。
2.3 startup.s和hal層初始化cube包里有針對不同的芯片的startup.s和flash.ld。系統(tǒng)上電后執(zhí)行的就是startup.s編譯后的指令,它會初始化中斷向量表、系統(tǒng)時鐘和棧指針,然后跳轉(zhuǎn)到main函數(shù)。
flash.ld用來標識flash和ram的地址映射和ram,還有各分段的鏈接地址。這些都在CMSIS目錄下,需要添加到新的工程里。
在main函數(shù)里,要調(diào)用hal_init()函數(shù)來對hal層進行初始化。
2.4 Makefilearm-gcc沒有單獨的文檔,它包含在GCC的文檔里面。編譯選項:
https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
對寫Makefile的編寫,需要注意這么幾點:
確保startup.s和flash.ld被正確編譯和鏈接。
將芯片系列用-D選項包含在Makefile里。
用-I選項指定頭文件搜索目錄,不要漏掉。
將燒寫命令寫在Makefile里方便燒寫。