前言
相信很多stm32的初學(xué)者對于創(chuàng)建一個新的工程還是感覺比較困難的,即使學(xué)習(xí)了一段時間的stm32,,創(chuàng)建一個新工程還是會感到無所適從,。相信大家在學(xué)習(xí)stm32之初都是把整個例程工程文件copy下來,在這個基礎(chǔ)上進(jìn)行修改編程的,,這樣就省掉了很多煩惱,。本人自學(xué)stm32已經(jīng)有好久的一段時間了,現(xiàn)在在準(zhǔn)備秋招,,順便也把之前學(xué)過的內(nèi)容復(fù)習(xí)一遍,。在整理stm32資料的時候,突然發(fā)現(xiàn)之前自己學(xué)習(xí)stm32的時候不會自己新建一個stm32工程,,所以今天趁空閑之余,,學(xué)習(xí)怎么去創(chuàng)建一個新工程,并記錄下來跟大家分享,。
創(chuàng)建一個stm32工程的步驟
1. 準(zhǔn)備資料
大家可以點(diǎn)擊一下網(wǎng)址,,下載創(chuàng)建工程時所需的固件庫:
http://download.csdn.net/download/xiebaocheng12138/9991922
2.新建工程文件夾
這里我們建立一個文件夾為 Template,作為工程的根目錄文件夾,。然后為了方便我們存放工程需要的一些其他文件,,這里我們還新建下面 5 個子文件夾:CORE ,LIB,OBJ,SYSTEM,USER。至于這些文件夾名字,,實際上是可以任取的,,我們這樣取名只是為了方便識別。
3.新建一個工程
打開 Keil,點(diǎn)擊 Keil 的菜單:Project –>New Uvision Project ,,然后將目錄定位到剛才建立的文件夾Template之下的USER子目錄,,工程的名字可以根據(jù)自己的要求設(shè)置,。USER文件夾就用來存放工程的文件。
4.選擇處理器
根據(jù)自身情況選擇處理器
點(diǎn)擊OK即可
5.搭建工程環(huán)境框架
a.打開官方固件庫包,,定位到我們之前準(zhǔn)備好的固件庫包的目錄:
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver 下面,,將目錄下面的 src,inc 文件夾 copy 到我們剛才建立的 GECLIB文件夾下面。
b.打開官方固件庫包,,定位到目錄:
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 下面,,將文件 startup_stm32f40_41xxx.s (啟動文件)復(fù)制到 CORE 目錄下面。
c.然后定位到目錄:
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ ,, 將 里 面 的 四 個 頭 文 件 :core_cm4.h ,、core_cm4_simd.h ,、core_cmFunc.h 以及 core_cmInstr.h 同樣復(fù)制到 CORE 目錄下面,。此時CORE的文件應(yīng)有
d. 接下來我們要復(fù)制工程模板需要的一些其他頭文件和源文件到我們工程。 首先定位到目錄:
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 將里面的 2 個頭文件 stm32f4xx.h 和 system_stm32f4xx.h 復(fù)制到 USER 目錄之下,。這兩個頭文件是STM32F4 工程非常關(guān)鍵的兩個頭文件,。
e.然后進(jìn)入目錄:
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates ,將 目 錄 下 面 的 6個 文 件 main.c ,,main.h,, stm32f4xx_conf.h , stm32f4xx_it.c ,, stm32f4xx_it.h ,,system_stm32f4xx.c 復(fù)制到 USER 目錄下面
完成以上步驟后,我們將需要的固件庫相關(guān)文件復(fù)制到了我們的工程目錄下面,,下面我們需要把這些文件加入我們的工程中去,。點(diǎn)擊進(jìn)入Manage Project Items
Project Targets一欄, 我們將Target名字修改為Template,然后在Groups一欄刪掉一個SourceGroup1,,建立三個 Groups:USER,CORE,LIB,。然后點(diǎn)擊 OK,可以看到我們的 Target名字以及 Groups 情況如下圖:
接上一步,,添加需要的文件選擇 GECLIB,,然后點(diǎn)擊右邊的 Add Files,定位到我們剛才建立的目錄\LIB\src 下面,將里面所有的文件選中(Ctrl+A),,然后點(diǎn)擊 Add,,然后 Close.可以看到 Files 列表下面包含我們添加的文件。
提示兩點(diǎn):
1.對于添加的文件說明:例若只用到GPIO的配置,,可以只選擇stm32f4xx_gpio.c這樣可以減少工程的代碼量,,提高編譯的速度。
2.有個文件 stm32f4xx_fmc.c 比較特殊,。這個文件STM32F42 和 STM32F43 系列才用到,,所以我們這里要把它刪掉(是 注意是 stm32f4xx_fmc.c 要刪掉,,不要刪掉 stm32f4xx_fsmc.c ) 。
添加完成后,,我們要在 MDK 里面設(shè)置頭文件存放路徑,。也就是告訴 MDK 到那些目錄下面去尋找包含了的頭文件。這一步驟非常重要,。 如果沒有設(shè)置頭文件路徑,,那么工程會出現(xiàn)報錯頭文件路徑找不到。
1.進(jìn)入設(shè)置界面:
2.這里我們需要添加的頭文件路徑包括:\CORE, \USER\以及\LIB\inc(添加工程中所有含有.h文件的路徑),。
3.STM32F40 系列的工程,,還需要添加一個全局宏定義標(biāo)識符。添加方法是點(diǎn)擊
魔術(shù)棒之后,,進(jìn)入 C/C++選項卡,,然后在 Define 輸入框連輸入:STM32F40_41xxx,USE_STDPERIPH_DRIVER 。注意這里是兩個標(biāo)識符 STM32F40_41xxx 和 USE_STDPERIPH_DRIVER ,, 他們之間是用英文的逗號隔開的,,請大家注意。
4.在做編譯工程之前我們首先要選擇編譯中間文件編譯后存放目錄,。方法是點(diǎn)擊魔術(shù)棒 ,,然后選擇“Output”選項下面的“Select folder for objects…”,接著選擇目錄為我們上面的 新建的 OBJ 目錄。,,最后在OBJ目錄下就可看到我們需要的程序.hex文件了,。
5.編譯剛才新建的工程
6.補(bǔ)充
關(guān)于keil中三個編譯按鈕的說明:現(xiàn)在把它們編號為1,2,,3.
第一個按鈕:它的作用是編譯當(dāng)前的文件,。這個按鈕的作用是只編譯單個文件,因此速度極快,,這主要用于檢查某個文件是否有語法錯誤,。比如在起動代碼里增加了一段匯編程序,看看有沒有語法錯誤,,就可以打開起動代碼文件,,然后點(diǎn)擊第一個按鈕,即可很快地看到編譯結(jié)果,。
第二個按鈕:它的作用是Build target,。我們應(yīng)該經(jīng)常使用的是這個按鈕,而不是第三個按鈕,。這個按扭在第一次編譯時和第三個按鈕沒區(qū)別,,都是對整個工程的所有源文件進(jìn)行編譯鏈接。但如果前面編譯鏈接過。由于對程序修改了少量地方,,那么這時就應(yīng)該使用這個按鈕了,。點(diǎn)擊這個按鈕時,編譯器會記錄上次編譯過的模塊,,以及修改過的源程序,,在這次編譯的過程中對那些沒修改過的源代碼并不進(jìn)行編譯而直接使用上次編譯的結(jié)果。這樣對于較大的工程將大大減小編譯鏈接時間,,如果為了修改某一行代碼而錯誤地選擇第三個按鈕,,那將浪費(fèi)大量的時間。
第三個按鈕:它的作用是Rebuild all target files,,即重新編譯所有的源文件,,而與上次的編譯結(jié)果無關(guān)。我們應(yīng)該盡量少用這個按鈕,。當(dāng)然有些情況我們需要使用這個按鈕,,比如修改了優(yōu)化級別之后最好點(diǎn)這個銨鈕編譯。
|