visualgdb下stm32工程模板修改
最近嘗試試用Visualgdb來調stm32。由於剛從Keil轉到visualgdb,有一些部分還不是很習慣。比如visualgdb中ST的std periph lib是以只讀的形式儲存在軟體安裝路徑下,而不是在工程檔案路徑下的。因此和keil的工程有部分難以相容。
因此在這裡整理區分並記錄一下。
首先分析keil中常用的Proj結構:
1、/user 中放stm32f10x_it.c main.c delay.c等使用者修改程度較大的檔案
2、/CMSIS 中儲存system_stm32f10x.c core_cm3.c 主要和cortex M3核有關。使用者基本不做修改。
3、/Liberaries 中儲存ST官方外設驅動庫
4、/Startup 放彙編啟動程式碼
可以看到使用者作修改的部分基本只有/user。
然後是分析visualgdb的結構:
1、/Source files/Device-specific files/StdPeriph 放core_cm3.c 和ST官方外設驅動庫
2、/Source files/Device-specific files 放startup_stm32f103xe.c和stm32.mak
3、/Source files 放main.c和system_stm32f10x.c
兩者對比差異如下:
1、keil中,所有檔案包含stm32f10x.h,而stm32f10x.h又包含了stm32f10x_conf.h。這個stm32f10x_conf.h裡包含了ST官方外設驅動庫的所有的*.h檔案。因此在呼叫這些外設庫函式時,只要包含stm32f10x.h即可。而根據vs的例程,visualgdb的庫中,一般用到哪個外設,就include這個外設的標頭檔案。而不是#include "stm32f10x.h"。此外,visualgdb的外設庫沒有stm32f10x_conf.h。
2、visualgdb的/Source files/Device-specific files下所有內容均在軟體安裝目錄下,不在工程資料夾中。工程資料夾中的檔案只有:main.c system_stm32f10x.c gcc_debug.h gcc_release.h。
為使得visualgdb相容keil的工程結構,修改如下
1、用keil的stm32f10x.h替換visualgdb的stm32f10x.h。原因是:我們需要stm32f10x_conf.h,但是這個檔案中有assert的巨集定義,而visualgdb的stm32f10x.h裡也有assert的巨集定義,會衝突。因此需要keil自己的stm32f10x.h和stm32f10x_conf.h。因此刪除stm32.mak中包含的$(BSP_ROOT)\STM32F1xxxx\CMSIS_StdPeriph\CM3\DeviceSupport\ST\STM32F10x
這條路徑。但是這個路徑下還有system_stm32f10x.c system_stm32f10x.h。前者在工程資料夾下也有,路徑沒了沒關係。但是後者工程資料夾下沒有。因此,從keil處拷貝一份到工程資料夾下。
因此,第1條中,要從keil複製的有:stm32f10x.h stm32f10x_conf.h system_stm32f10x.h。並且要刪除對應原有的內容或者移除路徑。
2、按照需要複製stm32f10x_it.c