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