鑒于我學(xué)習(xí)的資料內(nèi)容比較多,剛開始使用keil來構(gòu)建工程還是有點麻煩的,每次忘了點什么步驟就要從眾多數(shù)據(jù)中找到構(gòu)建項目的方法是十分麻煩的,所以我就干脆在此寫一個教程吧,在加深自己印象的同時,說不定還能幫助到某些同學(xué)呢(天真無邪的笑容,呵呵)。
在此聲明一下我使用的開發(fā)板是開元電子的STM32F103RC
首先我們要在某個目錄下建立一個文件夾,然后把后面的工程文件都放到這個文件夾中,方便以后尋找。為了演示方便(其實是我比較懶啊),我就建在桌面上了(你們千萬不要學(xué)我啊,建在桌面上相當(dāng)于放在C盤啊),然后再在我們的Template目錄下構(gòu)建一系列子文件夾(USER,CORE,HARDWARE,SYSTEM,STM32F10x_FWLib,OBJ),如圖:
CORE用來存放核心文件和啟動文件;
OBJ用來存放編譯過程文件以及hex文件;
STM32F10x_FWLib文件用來存放ST官方提供的庫函數(shù)源碼文件;
USER除了用來放工程文件外,還用來存放主函數(shù)文件main.c,以及其他包括system_stm32f10x.c等等
SYSTEM里存放的是接下來我們每個實驗都要使用的共用代碼,該代碼由ALIENTEK編寫,在此不做詳細(xì)介紹。
HAREWARE用來存放提供外部硬件相關(guān)的驅(qū)動函數(shù),每個.c源文件對應(yīng)一個.h頭文件。

現(xiàn)在地基已經(jīng)打好了,我們要開始造房子了,打開KEIL,選擇Project–>New Uvision Project,然后將目錄定位到剛才我們打的地基(USER目錄)下吧,房子(工程)的名字就叫Template.


點擊保存之后,你就會看到如下界面:

這是在告訴我們要選房子的型號了,這個時候我們就要應(yīng)地制宜了,經(jīng)過我們的判斷,我們決定選擇STM32F103RC這個型號的房子,因為在這個地方這種型號的房子最穩(wěn)定。

再單擊OK,出現(xiàn)如下界面:

這是KEIL5新增的一個功能,在這個界面,我們可以添加自己需要的組件,從而方便構(gòu)建開發(fā)環(huán)境,不過這里我們不做介紹。所以在所示界面,我們直接點擊Cancel,即可.得到下圖所示界面:

現(xiàn)在我們看看USER目錄下面包含2個文件夾和2個文件,如下圖:

這里我們說明一下,Template.uvprojx是工程文件,非常關(guān)鍵,不能輕易刪除。Listings和Objects文件夾是KEIL自動生成的文件夾,用于存放編譯過程產(chǎn)生的中間文件。這里,為了跟之前版本工程兼容,我們把兩個文件夾刪除,我們將其放在之前我們新建的Template目錄下的OBJ文件夾,用來存放編譯中間文件。當(dāng)然,我們不刪除這兩個文件夾也是沒有關(guān)系的,只是我們不用它而已。
到了這里,我們也只是打了地基,選了房子型號,設(shè)計了圖紙,要建房子,我們還要什么呢,沒錯,就是磚(啟動代碼以及.c文件)!現(xiàn)在我們開始搬磚:
下面我們要將官方的固件庫包里的源碼文件復(fù)制到我們的工程目錄文件夾下面。
打開官方固件庫包,定位到我們之前準(zhǔn)備好的固件庫包的目錄
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下面,
將目錄下面的src,inc文件夾copy到我們剛才建立的STM32F10x_FWLib文件夾下面。
src存放的是固件庫的.c文件,inc存放的是對應(yīng)的.h文件,不妨打開這兩個文件目錄過目一下里面的文件,每個外設(shè)對應(yīng)一個.c文件和一個.h頭文件。

下面我們要將固件庫包里面相關(guān)的啟動文件復(fù)制到我們的工程目錄CORE之下。
打開官方固件庫包,定位到目錄
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下面,將文件core_cm3.c和文件core_cm3.h復(fù)制到CORE下面去。然后定位到目錄STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下面,將里面startup_stm32f10x_hd.s文件復(fù)制到CORE下面。這里我們我之前已經(jīng)解釋了不同容量的芯片使用不同的啟動文件,我的芯片STM32F103RCT6是大容量芯片,所以選擇這個啟動文件

定位到目錄:
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下面
將里面的三個文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,復(fù)制到我們的USER目錄之下。然后將
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下面的4個文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h復(fù)制到USER目錄下面。
在我們協(xié)會提供的資料中,打開任何一個固件庫的實驗,可以看到下面有一個SYSTEM文件夾,進(jìn)入,里面有三個子文件夾delay,sys,usart,將這三個子文件夾copy到我們新建的SYSTEM文件夾之下

呼~總算搬完了,終于可以建了,點開KEIL, 右鍵點擊Target1,選擇ManageProject Items

更改我們的Target名稱為Template,添加Groups,如下:

然后我們往Groups里面添加文件,點擊Add Files添加:
USER目錄下面需要添加的文件為main.c,stm32f10x_it.c,system_stm32f10x.c.
CORE目錄下需要添加的文件為core_cm3.c,startup_stm32f10x_hd.s(注意,默認(rèn)添加的時候文件類型為.c,也就是添加startup_stm32f10x_hd.s啟動文件的時候,你需要選擇文件類型為All files才能看得到這個文件);
FWLIB目錄下需要添加的文件為我們建立的文件夾STM32F10x_FWLib/src下面所有的.c文件(全選快捷鍵為Ctrl+A).這里需要說明一下,對于我們寫代碼,如果我們只用到了其中的某個外設(shè),我們就可以不用添加沒有用到的外設(shè)的庫文件。例如我只用GPIO,我可以只用添加stm32f10x_gpio.c而其他的可以不用添加。這里我們?nèi)刻砑舆M(jìn)來是為了后面方便,不用每次添加,當(dāng)然這樣的壞處是工程太大,編譯起來速度慢,你們可以自行選擇。

SYSTEM目錄下需要添加的文件為SYSTEM文件夾的各個子文件夾下的.c文件。

HARDWARE內(nèi)的文件需要根據(jù)你的程序決定,可以之后添加。
接下來我們要編譯工程,在編譯之前我們首先要選擇編譯中間文件編譯后存放目錄。
方法是點擊魔術(shù)棒,然后選擇“Output”選項下面的“Select folder forobjects…”,然后選擇目錄為我們上面新建的OBJ目錄。這里大家注意,如果我們不設(shè)置Output路徑,那么默認(rèn)的編譯中間文件存放目錄就是KEIL自動生成的Objects目錄和Listings目錄。
還要勾上下面的三個選項。其中Create HEX file是編譯生成hex文件,Browser Information是可以查看變量和函數(shù)定義。

房子快建好了,我們該做宣傳了吧,這個時候就是要把我們的新房的地址告訴KEIL:
下面我們要告訴KEIL,在哪些路徑之下搜索需要的頭文件,也就是頭文件目錄。這里大家要注意,對于任何一個工程,我們都需要把工程中引用到的所有頭文件的路徑都包含到進(jìn)來?;氐焦こ讨鞑藛危c擊魔術(shù)棒,出來一個菜單,然后點擊c/c++選項.然后點擊IncludePaths右邊的按鈕。彈出一個添加path的對話框,然后我們將圖中幾個目錄添加進(jìn)去(HARDWARE根據(jù)你的程序,之后添加)。記住,keil只會在一級目錄查找,所以如果你的目錄下面還有子目錄,記得path一定要定位到最后一級子目錄。然后點擊OK.

因為3.5版本的庫函數(shù)在配置和選擇外設(shè)的時候通過宏定義來選擇的,所以我們需要配置一個全局的宏定義變量。按照上面的步驟,點擊魔術(shù)棒,定位到c/c++界面,然后填寫
“STM32F10X_HD,USE_STDPERIPH_DRIVER”到Define輸入框里面(請注意,兩個標(biāo)識符中間是逗號不是句號,如果你不能確定你輸入的是正確的,可以直接打開任何一個庫函數(shù)實例,然后復(fù)制過來這串文字即可)。這里解釋一下,如果你用的是中容量那么STM32F10X_HD修改為STM32F10X_MD,小容量修改為STM32F10X_LD.然后點擊OK。

到這里,我們的房子的外部構(gòu)架(工程模板)是徹底OK了。
至于之后的裝修就看你們的喜好的,我這里就不舉例說明的,我們的實驗資料里可以學(xué)到之后知識。