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