鑒于我學習的資料內容比較多,剛開始使用keil來構建工程還是有點麻煩的,每次忘了點什么步驟就要從眾多數據中找到構建項目的方法是十分麻煩的,所以我就干脆在此寫一個教程吧,在加深自己印象的同時,說不定還能幫助到某些同學呢(天真無邪的笑容,呵呵)。
在此聲明一下我使用的開發板是開元電子的STM32F103RC
首先我們要在某個目錄下建立一個文件夾,然后把后面的工程文件都放到這個文件夾中,方便以后尋找。為了演示方便(其實是我比較懶啊),我就建在桌面上了(你們千萬不要學我啊,建在桌面上相當于放在C盤啊),然后再在我們的Template目錄下構建一系列子文件夾(USER,CORE,HARDWARE,SYSTEM,STM32F10x_FWLib,OBJ),如圖:
CORE用來存放核心文件和啟動文件;
OBJ用來存放編譯過程文件以及hex文件;
STM32F10x_FWLib文件用來存放ST官方提供的庫函數源碼文件;
USER除了用來放工程文件外,還用來存放主函數文件main.c,以及其他包括system_stm32f10x.c等等
SYSTEM里存放的是接下來我們每個實驗都要使用的共用代碼,該代碼由ALIENTEK編寫,在此不做詳細介紹。
HAREWARE用來存放提供外部硬件相關的驅動函數,每個.c源文件對應一個.h頭文件。
現在地基已經打好了,我們要開始造房子了,打開KEIL,選擇Project–>New Uvision Project,然后將目錄定位到剛才我們打的地基(USER目錄)下吧,房子(工程)的名字就叫Template.
點擊保存之后,你就會看到如下界面:
這是在告訴我們要選房子的型號了,這個時候我們就要應地制宜了,經過我們的判斷,我們決定選擇STM32F103RC這個型號的房子,因為在這個地方這種型號的房子最穩定。
再單擊OK,出現如下界面:
這是KEIL5新增的一個功能,在這個界面,我們可以添加自己需要的組件,從而方便構建開發環境,不過這里我們不做介紹。所以在所示界面,我們直接點擊Cancel,即可.得到下圖所示界面:
現在我們看看USER目錄下面包含2個文件夾和2個文件,如下圖:
這里我們說明一下,Template.uvprojx是工程文件,非常關鍵,不能輕易刪除。Listings和Objects文件夾是KEIL自動生成的文件夾,用于存放編譯過程產生的中間文件。這里,為了跟之前版本工程兼容,我們把兩個文件夾刪除,我們將其放在之前我們新建的Template目錄下的OBJ文件夾,用來存放編譯中間文件。當然,我們不刪除這兩個文件夾也是沒有關系的,只是我們不用它而已。
到了這里,我們也只是打了地基,選了房子型號,設計了圖紙,要建房子,我們還要什么呢,沒錯,就是磚(啟動代碼以及.c文件)!現在我們開始搬磚:
下面我們要將官方的固件庫包里的源碼文件復制到我們的工程目錄文件夾下面。
打開官方固件庫包,定位到我們之前準備好的固件庫包的目錄
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下面,
將目錄下面的src,inc文件夾copy到我們剛才建立的STM32F10x_FWLib文件夾下面。
src存放的是固件庫的.c文件,inc存放的是對應的.h文件,不妨打開這兩個文件目錄過目一下里面的文件,每個外設對應一個.c文件和一個.h頭文件。
下面我們要將固件庫包里面相關的啟動文件復制到我們的工程目錄CORE之下。
打開官方固件庫包,定位到目錄
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下面,將文件core_cm3.c和文件core_cm3.h復制到CORE下面去。然后定位到目錄STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下面,將里面startup_stm32f10x_hd.s文件復制到CORE下面。這里我們我之前已經解釋了不同容量的芯片使用不同的啟動文件,我的芯片STM32F103RCT6是大容量芯片,所以選擇這個啟動文件
定位到目錄:
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下面
將里面的三個文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,復制到我們的USER目錄之下。然后將
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下面的4個文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h復制到USER目錄下面。
在我們協會提供的資料中,打開任何一個固件庫的實驗,可以看到下面有一個SYSTEM文件夾,進入,里面有三個子文件夾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(注意,默認添加的時候文件類型為.c,也就是添加startup_stm32f10x_hd.s啟動文件的時候,你需要選擇文件類型為All files才能看得到這個文件);
FWLIB目錄下需要添加的文件為我們建立的文件夾STM32F10x_FWLib/src下面所有的.c文件(全選快捷鍵為Ctrl+A).這里需要說明一下,對于我們寫代碼,如果我們只用到了其中的某個外設,我們就可以不用添加沒有用到的外設的庫文件。例如我只用GPIO,我可以只用添加stm32f10x_gpio.c而其他的可以不用添加。這里我們全部添加進來是為了后面方便,不用每次添加,當然這樣的壞處是工程太大,編譯起來速度慢,你們可以自行選擇。
SYSTEM目錄下需要添加的文件為SYSTEM文件夾的各個子文件夾下的.c文件。
HARDWARE內的文件需要根據你的程序決定,可以之后添加。
接下來我們要編譯工程,在編譯之前我們首先要選擇編譯中間文件編譯后存放目錄。
方法是點擊魔術棒,然后選擇“Output”選項下面的“Select folder forobjects…”,然后選擇目錄為我們上面新建的OBJ目錄。這里大家注意,如果我們不設置Output路徑,那么默認的編譯中間文件存放目錄就是KEIL自動生成的Objects目錄和Listings目錄。
還要勾上下面的三個選項。其中Create HEX file是編譯生成hex文件,Browser Information是可以查看變量和函數定義。
房子快建好了,我們該做宣傳了吧,這個時候就是要把我們的新房的地址告訴KEIL:
下面我們要告訴KEIL,在哪些路徑之下搜索需要的頭文件,也就是頭文件目錄。這里大家要注意,對于任何一個工程,我們都需要把工程中引用到的所有頭文件的路徑都包含到進來。回到工程主菜單,點擊魔術棒,出來一個菜單,然后點擊c/c++選項.然后點擊IncludePaths右邊的按鈕。彈出一個添加path的對話框,然后我們將圖中幾個目錄添加進去(HARDWARE根據你的程序,之后添加)。記住,keil只會在一級目錄查找,所以如果你的目錄下面還有子目錄,記得path一定要定位到最后一級子目錄。然后點擊OK.
因為3.5版本的庫函數在配置和選擇外設的時候通過宏定義來選擇的,所以我們需要配置一個全局的宏定義變量。按照上面的步驟,點擊魔術棒,定位到c/c++界面,然后填寫
“STM32F10X_HD,USE_STDPERIPH_DRIVER”到Define輸入框里面(請注意,兩個標識符中間是逗號不是句號,如果你不能確定你輸入的是正確的,可以直接打開任何一個庫函數實例,然后復制過來這串文字即可)。這里解釋一下,如果你用的是中容量那么STM32F10X_HD修改為STM32F10X_MD,小容量修改為STM32F10X_LD.然后點擊OK。
到這里,我們的房子的外部構架(工程模板)是徹底OK了。
至于之后的裝修就看你們的喜好的,我這里就不舉例說明的,我們的實驗資料里可以學到之后知識。