1. 模板工程的建立(超級詳細版,使用的是keil 4.5版本)算法
1.1建立工程目錄函數
良好的工程結構能讓文件的管理更科學,讓開發更容易更方便,但願你們養成良好的習慣,使用具備合理結構的工程目錄,當你着手於較大的軟件項目時,類別分明,層次合理的工程目錄結構會讓你的開發管理化繁爲簡。spa
(1)首先在一個目錄下建立主文件夾,名字按需求取,這裏取名爲:(0)工程模板.net
(2)在該文件夾裏分別創建名字爲Project和Source的文件夾。其中Project文件夾用來放置工程文件,而Source用來放置程序代碼文件。code
↑blog
(3)在Project文件夾裏創建名字爲Obj和List的文件夾,這是用來存放工程編譯文件的。ip
↑資源
(4)而後在Source文件夾中創建3個名字分別爲Application,Drivers和STM32_FWLib的文件夾。Application是用來放置應用程序文件的,例如main.c,和一些應用配置文件,如stm32f10x_it.c,stm32f10x_conf.h。Drivers是用來放置驅動程序文件的,STM32_FWLib是用來放置ST固件庫文件的。開發
↑get
(5)在Application中添加一個名爲main的文件夾。若是有其餘應用程序,好比一些純軟件算法之類的代碼文件能夠放置在一個新文件夾中而後放在Application文件夾中,例若有一個Bmp圖像解碼的程序模塊bmp.c和bmp.h,那麼咱們在Application中新建一個文件夾叫BMPDecoder,而後把bmp.c和bmp.h放在BMPDecoder文件夾中,以此類推。
↑
(6)在main文件夾中添加如下文件,
↑
(7)回到Source文件夾中,在Drivers文件夾下建立驅動文件目錄,根據工程須要添加驅動目錄,也能夠預先添加驅動文件夾,留做之後用。
↑
(8)在Led_Drvier中添加Led的驅動文件,若是要使用到串口驅動和按鍵驅動,按照上述說明在對應的文件夾中添加對應的驅動文件。
↑
(9)回到Source文件夾下,在STM32_FWLib文件夾下添加ST固件庫,庫文件直接從官方固件庫下拷貝過來,在光盤資料中的
\軟件資料\STM32固件庫(3.0.0)\stm32f10x_stdperiph_lib_v3.0.0\Libraries\路徑下存放有
↑
(10)直接在STM32固件庫(3.0.0)中的CMSIS拷貝到STM32_FWLib下,這些庫文件是和CotexM3內核相關的固件,其中Starup下放置着STM32的啓動代碼。
↑
(11)而後從固件庫的STM32F10x_StdPeriph_Driver中的兩個文件夾inc和src到拷貝到
FWLib文件夾中。inc中是固件庫的頭文件,src是固件庫的c代碼文件
↑
完成上述步驟後,工程目錄就建立好了,下一步就是創建STM32的工程的方法。
1.2創建MDK平臺下的STM32工程
(1)雙擊進入keil4。
(2) 關閉當前打開的工程,方法是:點擊Project->CloseProject
(3)新建一個工程,點擊Project->NewuVision Project
(4)選擇工程保存的路徑
(5)填寫工程名字,最好填寫英文名字,不要含有中文,命名爲Red Leaves STM32Demo
(6)選擇MCU類型,咱們的開發板是STM32F103ZET6,那麼咱們選擇的類型則爲STM32F103ZE
(7)咱們選擇不從keil的安裝目錄下複製啓動代碼文件到工程中,事後咱們本身手動添加,咱們使用來自工程目錄的固件中的啓動代碼,文件在下面的路徑中
(0)工程模板\Source\STM32_FWLib\CMSIS\startup\startup_stm32f10x_hd.s
(8)點擊Manage Components在工程中建立文件目錄,選擇否!
(9)修改Project Target的名字爲Red Leaves(名字是能夠根據本身須要命名的),新建4個分組,分別命名爲Starup,Application,Drviers,FWLib。注意一點,這裏新建4個組後,根據代碼文件功能的不一樣而添加在對應的組下,但這些組僅僅起到一個分類做用而已,就是讓人看得以爲一目瞭然,並無起到路徑的做用。若是你喜歡,你也能夠不創建分組,把全部文件都丟在一塊兒,一堆一堆的,可是這樣相信你們本身看得都煩,尤爲是工程比較大,上百個,甚至上千個文件的時候,不分類放,你想要編輯的文件本身都找不到,更別說別人了。分類放置是一種必須養成的良好習慣,分組如何分呢,最好和咱們以前建立的代碼工程目錄一致,也能夠根據須要稍做調整。
(10)在Starup裏添加starup_stm32f10x_hd.s,該啓動代碼文件在路徑
(0)工程模板\Source\STM32_FWLib\CMSIS\startup\starup_stm32f10x_hd.s
(11)在Applicaiton裏添加文件,這裏要提一點,keil只須要編譯c文件,只須要添加c文件進來便可,而添加h進來對keil來講是沒有必要的,其餘的編譯器也是如此。可是筆者比較喜歡把h文件也添加進來,這樣方便查找和編輯,處於這個目的,就把h文件也添加進來了。
步驟和(10)同樣,文件相信你們都知道,在(0)工程模板\Source\Application\main中。
(12)給Drivers這一組添加文件,把工程用到的驅動都添加進來
(13)給FWLib添加文件,添加的是ST固件文件,你的程序裏用到STM32的什麼資源就添加什麼固件驅動文件進去,可是無論你使用了什麼資源,core_cm3.c,system_stm32f10x.c,misc.c,stm32f10x_rcc.c這幾個文件是必需要有的,算是STM32正常運行的基本固件。添加完畢後點擊OK退出。
(14)咱們在使用一些文件模塊的時候,每每須要在程序文件頂部先include進來
好比#include "stm32f10x.h",#include "Led_Driver.h",才能使用程序模塊的功能函數,可是編譯器怎麼知道這些頭文件在哪裏呢,要知道,這些頭文件是放在不一樣目錄下的,這就要求咱們設置一些路徑變量了,讓編譯器在這些路徑下查找h文件,程序才能順利編譯。
點擊,在C/C++裏的Include Paths中把路徑給填寫上,也就是把你的程序工程中有h文件的目錄路徑名填寫在其中,全部路徑都以
所在的路徑爲參考路徑。好比說main.h,它在\Source\Application\main這一路徑下,而Project文件夾和Source文件夾處於同級目錄,Red Leaves STM32 Demo.uvproj這個文件在Project文件夾中,那麼以Red Leaves STM32 Demo.uvproj爲參照點,main.h填寫在Include Paths中的路徑名就是 .. \Source\Application\main,其中「..」表明上級目錄。因此main.h處在Red Leaves STM32 Demo.uvproj的上級目錄Source下的Application目錄下的main目錄中,有點拗口吧。
(15)咱們在寫程序的過程當中有時候會用到標準庫中的庫函數,好比咱們經常使用的printf()就是在stdio庫中的,咱們要向在程序中正常使用庫,那麼就必須把使用庫這一選項勾選上。
補充3點,使用3.5版本的STM32固件庫還須要把固件庫的宏添加到工程選項中
(16)說了這麼多,咱們如今能夠來編譯一下新建好的模板程序了,點擊編譯,徹底ok。最後筆者再囉嗦一回,若是你添加了新的程序模塊或者固件庫,那麼必須記住3點,一是在工程中添加c文件。第二點,在Target Options中填寫Include Paths。第三點,在使用程序模塊的地方上記得#include「xxx.h」。下面以ST固件添加作圖例。
2. 模板工程的使用
咱們作這樣一個模板的目的就是能夠更方便你們的開發,按照必定的步驟,咱們就能夠迅速的創建本身的工程並如搭積木似的擴展功能,這樣能夠省時省力。下面咱們以添加串口功能爲例說明如何在模板的基礎上作功能的擴展。
(1)在Source\Drviers目錄下新增長Usart_Drvier文件夾(若是有就不用新建啦),並把Usart_Drvier.c和Usart_Drvier.h放在Usart_Drvier文件夾中。
(2)把Usart_Drvier.c添加到工程中的Drivers組下,而後把stm32f10x_usart.c添加到FWLib組下
(3)在TargetOptions的C/C++的Include Paths下把Usart_Driver.h的路徑填寫上。
(4)因爲串口使用到了固件庫中的stm32f10x_usart.c的資源,因此要在stm32f10x_conf.h
中把stm32f10x_usart.h包含進來。
(5)因爲Usart_Drvier.c要使用到庫中的函數printf()等等,因此要勾選上Use MicroLib的選項。
(6)而後在main.h中添加#include「Usart_Driver.h」。這樣在main.c中就能使用Usart_Driver.c的功能函數了。
總結
對於初學者來講,剛開始創建有必定結構的工程目錄以爲會有些繁瑣,可是一但熟悉後,養成習慣後就不會以爲有什麼了,萬事開頭難嘛。
本文模版工程到http://download.csdn.net/detail/zsy2020314/5744187免費下載