STM32根據(jù)庫建立自己的工程
一.新建工程時的軟件操作,工程配置方法:
1.點擊菜單欄的Project→New
2.接著彈出一個對話框,選擇芯片型號,我們用的是ST公司的STM 32F103VE,選擇該芯片,點擊“OK”即可。
3.接著彈出的對話框,如下,問我們是否要拷貝STM 32的啟動代碼到工程文件中,這份啟動代碼在M 3系列中都是適用的,我們可以點擊“是”。但是,這里用ST的固件庫創(chuàng)建工程,庫里面也有啟動代碼文件,為了保持庫的完整性,我們就不需要開發(fā)環(huán)境自帶的啟動代碼了,稍后,我們手動添加,所以這里,我們點擊“否”。
4.此時,已經(jīng)新建了一個工程,但是,里面還沒有我們所需的文件,接下來,就該添加所需文件了。在工程的根目錄(即,保存工程的文件夾下)新建以下3個文件夾,User,F(xiàn)Wlib,CMSIS。User用來存放工程文件和用戶代碼,包括主函數(shù)main.c。FWlib用來存放固件庫里面的inc和src這兩個文件夾以及它們里面的所有文件,這里面包含了芯片上的所有外設的驅動。CMSIS用來存放固件庫的啟動文件,和,M 3系列通用的文件。CMSIS里面的文件適合所有M 3內(nèi)核的單片機。CMSIS的縮寫為,Cortex Microcontroller Software Interface Standard,是ARM Cortex微控制器軟件接口標準,是ARM公司為芯片廠商提供的一套通用的且獨立于芯片廠商的處理器軟件接口。
5.把固件庫的Libraries STM32F10x_StdPeriph_Driver目錄下的inc和src這兩個文件夾復制到剛才新建的FWlib文件夾中。
6.把固件庫的Project STM32F10x_StdPeriph_Template目錄下的main.c,stm32f10x_conf.h,stm32f10x_it.h,stm32f10x_it.c復制到User文件夾下。main.c也可以不復制,稍后,自己新建一個main.c文件在User文件夾下,也可以。stm32f10x_it.h,stm32f10x_it.c這兩個文件里面是中斷函數(shù),里面為空,用戶需要時,可以自己添加中斷服務程序。stm32f10x_conf.h是需要用戶配置的頭文件,當我們需要用到芯片中某部分外設的驅動時,只需要在該文件中把相應注釋標記去掉,即可,這樣就可以把相應頭文件包含進來了。片上外設的驅動在Libraries STM32F10x_StdPeriph_Driver目錄下的src文件夾中,它們的頭文件在inc文件夾中。
7.將固件庫的Libraries CMSIS Core CM3文件夾下的全部文件和文件夾復制到剛才新建的CMSIS文件夾中,Startup / arm目錄下一般有三個啟動文件,分別為,startup_stm32f10x_ld.s,startup_stm32f10x_md.s,startup_stm32f10x_hd.s,按順序是小,中,大容量Flash單片機的啟動文件。我們這里用的是STM32F103VE有512 K Flash,屬于大容量的。所以,稍后,把startup_stm32f10x_hd.s添加到我們的工程中。不同大小的Flash對應的啟動文件不同,這點要注意。
8.最后,可以把我們的工程文件,和,其它一些編譯產(chǎn)生的文件都放在User文件夾下,這樣,看起來比較整潔。
9.回到Keil軟件的工程中,鼠標右擊“Target”,在彈出的菜單中選擇“Add Group”選項,新建4個分組。分別命名為,STARTCODE,USER,F(xiàn)Wlib,CMSIS。STARTCODE管理啟動代碼,USER管理用戶自定義的應用程序,F(xiàn)Wlib管理庫文件,CMSIS管理M 3系列單片機通用的文件。
10.下面,往這些新建的組里面添加文件。雙擊哪個組,就可以往哪個組里面添加文件。(往組里面添加文件,和剛才在工程保存目錄下面建立的文件夾沒有任何關系,它們是獨立的,互不影響。設置組,只是為了方便工程管理。)在STARTCODE里面添加Startup / arm目錄下的startup_stm32f10x_hd.s文件,
在USER組里添加main.c,stm32f10x_it.c這兩個文件。在FWlib組里面添加src里面的全部驅動文件。當然,src里面的驅動文件,也可以需要哪個就添加哪個,這里全部添加,是為了后續(xù)開發(fā)的方便。并且,我們可以通過配置stm32f10x_conf.h文件來選擇性添加,只有在stm32f10x_conf.h中被配置的文件才會被編譯。
●注意,在組里面添加的,都是匯編文件和C文件(即,以.s和.c為后綴的文件),即,都是源程序文件(可能還有其它類型的文件,但是,都必須是源程序文件),并且,一般地,所有源程序文件都必須添加到組里面才行。但是,頭文件是不需要添加到組里面的。
●注意:往組里面添加源程序文件很重要。如果,少添加一個源程序文件,編譯器就找不到該源程序文件了,很有可能編譯會出錯。
11.接下來,需要對工程進行一些設置。點擊工具欄中的魔術棒按鈕,在彈出的“Options for Target”窗口中,選擇“Target”選項卡,在“Xtal ( MHz )”處,可以設置外部時鐘頻率,即,外部晶振頻率。這個頻率是仿真時使用的頻率,如果要使用Keil uVision 4軟件仿真,就應該把它設置成,和實際硬件的外接晶振頻率一樣。如果,不需要仿真,或者,仿真時,外部時鐘頻率因素不重要,也可以不修改,使用默認值8 MHz。如下圖。
12.點擊“Output”選項卡,點擊“Select Folder for Objects”按鈕,可以為編譯時產(chǎn)生的輸出文件,設置一個文件夾,把這些輸出文件都輸出到該文件夾下。還可以把“Creat HEX File”選項框勾上,這樣,就可以在編譯時,輸出16進制的可執(zhí)行文件了。
13.點擊“Listing”選項卡,點擊“Select Folder for Listings”按鈕,可以為編譯時產(chǎn)生的鏈接文件,設置一個文件夾,把這些鏈接文件都輸出到該文件夾下。
14.點擊“C / C++”選項卡,這里有兩個設置很重要(“Define”和“Include Paths”,如下圖),設置不對,編譯會出很多錯誤。另外,下圖中的“One ELF Section per function”一般要選上。
(1). Define是設置,預定義符號,在這里定義符號,相當于在程序文件中使用#define語句定義符號。這里一般要填入以下內(nèi)容:USE_STDPERIPH_DRIVER, STM32F10X_HD, USE_STM3210E_EVAL其中,定義了USE_STDPERIPH_DRIVER就可以使用,標準外設驅動。定義了STM32F10X_HD,就可以對固件庫進行條件編譯。定義了USE_STM3210E_EVAL,就可以使用ST公司的官方評估板作為硬件來下載,調試程序,這個宏,一般可以不定義,因為我們很少使用ST公司的官方評估板。Define中要填的內(nèi)容,也可以從例子工程,或者,工程模板里面復制,粘貼到這里。
●注意:Define欄里面,填的內(nèi)容對STM32F10x系列的芯片是通用的,引腳數(shù)目不同也可以通用。
●注意:定義STM32F10X_HD,是因為我們用的芯片是大容量的。添加了STM32F10X_HD這個宏以后,庫文件里面為大容量芯片定義的寄存器,我們都可以使用了。芯片是小容量,或者,中容量時,宏要換成,STM32F10X_LD或者STM32F10X_MD。其實,不管什么容量,我們只要添加STM32F10X_HD這個宏即可。當我們用小,或者,中容量的芯片時,那些為大容量定義的寄存器,不去訪問就是了,反正,也訪問不了。
(2). Include Paths是設置,頭文件的搜索路徑的。我們的工程中,用到的頭文件在哪個路徑,就把該路徑添加進來,即可。有時,也可以根據(jù)編譯錯誤,發(fā)現(xiàn)哪些頭文件,編譯器找不到,再把這些頭文件的路徑添加進來。一般要填入的路徑有以下一些,每個不同的路徑以分號間隔:..;
●在添加目錄時要注意,在下圖界面下,必須把藍色條移到最后的空白處,再點擊“OK”,最后一個路徑才能被添加成功,否則,最后一個路徑會丟失。
●注意:因為編譯器不會自動搜索指定目錄的子文件夾,所以每個路徑都要添加,就算,路徑1是路徑2的子目錄,路徑1和路徑2都必須同時添加,才行。
15.點擊“Debug”選項卡,選中左邊的Use Simulator,就是使用軟件仿真模式調試,選中右邊的Use,就是使用硬件仿真,調試。由于我們多使用開發(fā)板加J-Link調試,所以選中“Cortex–M / R
在上圖的界面中,點擊“Settings”按鈕,進行J-Link的一些接口進行設置。“Max Clock”項一般設置成2MHz,如果設置太高,可能J-Link會不支持,這樣就會出錯。有時,如果硬件調試出錯了,把這里設置低一些,可能就會消除錯誤。其它設置,默認即可。如下圖。
16.點擊“Utilities”,選中“Use Target Driver for Flash Programming”,在它下面選擇“Cortex–M / R
評論