如何使用STM32_V3.5版本固件庫建立工程模板
準備工作如下: 本文引用地址:http://butianyuan.cn/article/201611/315428.htm1:下載STM32_V3.5的固件庫去論壇上找,很多 2:準備KeiluVision4軟件,并安裝到電腦上。 3:不要帶板凳了,帶上你的腦袋就行,因為板凳不會思考。 開始: 1:首先解壓縮下載的固件庫(保留一個備份,你懂的) 里面有, _htmresc:ST的logo完全無用,不用理會, Libraries:比較重要的文件包含STM32的系統(tǒng)文件和大量頭文件,也就是庫文件了。 Project:包含大量外設的例程,和各個軟件版本的評估版工程模板。 KEIL對應的就是MDK-ARM文件下的工程模板。你也可以利用這個工程模板來修改,得到你自己的工程模塊,本文不用此法。 Utilities:就是評估版的相關文件:本文也不會用到,無視既可。 這四個文件,(先去掉文件的只讀屬性吧,相信你會的) 2:安照一般的方法,建立工程模板先建立一些文件夾,比如工程模板要建在D盤,下面的 D:STM32PRO1(項目名字,自己隨便定)再該文件夾下面新建以下文件夾 Libraries:直接復制上述的的Libraries文件夾,把其中的CMSIS剪切出來,放到PRO1目錄下,直接成為另一個文件夾。另外把STM32F10x_StdPeriph_Driver下的inc和src文件夾剪切出來,放在Libraries目錄下,STM32F10x_StdPeriph_Driver文件夾就可以刪除了。會發(fā)現(xiàn)里面就只剩下頭文件了。 CMSIS:就是從上面粘貼來的。在CMSISCM3DeviceSupportSTSTM32F10x目錄下直接將Startup文件剪切出來,放在Libraries目錄下,其他的不需要動。里面存放的就是重要的系統(tǒng)文件,先不要理會是什么作用吧,慢慢就明白了。 Startup就是從上面粘貼來的。我們要用的比如是:STM32F103VC,只要把startuparm目錄下的startup_stm32f10x_hd.s文件剪切出來,放到Startup下面就好。Startup只要這個文件,其它全刪吧。這個就是啟動文件,根據(jù)芯片存儲容量來選擇。 USER:請在里面放個main.c的文件,里面就一個WHILE(1)循環(huán)就好,但請加上這個頭文件:#i nclude"stm32f10x.h"。另外從固件庫的ProjectSTM32F10x_StdPeriph_Template目錄下復制stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h。這四個h文件是Libraries里面沒有的,理論上要自己寫好的,但是固件庫里有就直接復制吧,呵呵。另外你還發(fā)現(xiàn)那個目錄下有個system_stm32f10x.c文件,有人問,這個怎么不一起復制了,很簡單,因為CMSIS這個文件夾里面已經(jīng)有了,個人認為還是放在這里比較好,因為是系統(tǒng)文件。 Project:這個文件夾用來存放項目文件。比如你等下要建立的工程名字TEST.uvproj,就放在這里。在該文件下存放一些項目的輸出信息,OUTPUT,和LISTING信息,可以建立這兩個文件夾。等下就可以在OPTIONSFORTARGETPROJECT里面進行路徑設置。 文件夾分配到此結(jié)束,為什么要這么分配文件夾呢,其實是個人理解的問題,我這樣的目的是為了比較清楚,也符合一般程序員的設置方法。等你了解了,隨便安排文件下都可以。 下面開始建立工程模板。 3:打開KEIL軟件,建立新工程。 比如建TEST.uvproj,保存在剛才的Project文件夾下面。 選擇你使用的STM32芯片,比如我用的是103VC的,就選擇那個,確定后,會跳出來個窗口,問你是否復制啟動代碼,選擇否,因為我們已經(jīng)弄好了,前面的準備工作不是白做的。 然后右鍵TARGET1,選擇ManageCcmponents,把文件給加進去吧。 來圖片了:加好文件后,出現(xiàn)如下的文件架構(gòu)。(按下圖加文件吧,每個文件都在相應的文件夾里,前面的工作不是白做的。)圖看不到請看附件 圖1 接下來要設置編譯文件的路徑,設置好后如下圖: 圖2 現(xiàn)在編譯,還是有錯誤的??梢韵染幾g下, 因為main.c中有#i nclude"stm32f10x.h"這句,在這個重要的頭文件里,并沒有定義好一些東西,分別在stm32f10x.h的0070行,取消對#defineSTM32F10X_HD的屏蔽, 0105行取消對#defineUSE_STDPERIPH_DRIVER的屏蔽,這兩個定義好,才能正常工作,第一個是選擇存儲容量的型號,每種芯片都不太一樣,所以讓你選擇,第二個是使用標準庫文件,因為我們是要用庫的,所以必須選擇,默認是不用庫的,直接進行寄存器的操作。 像初學者是用庫比較好,所以肯定選擇的。 也可以直接如下圖操作。 圖3 ,作用是一樣的。 選擇好后,直接編譯,恭喜你,成功了。 4:最后要說明的就是: 圖4 這個庫文件,是必須選擇misc.c和stm32f10x_rcc.c的。 另外就是你選擇用什么功能,就把什么功能的c文件加進去,我這里已經(jīng)加了一個對IO口的應用的一個c文件。 5:一些重要文件的說明吧 core_cm3.c/core_cm3.h 該文件是內(nèi)核訪問層的源文件和頭文件,查看其中的代碼多半是使用匯編語言編寫的。 stm32f10x.h 該文件是外設訪問層的頭文件,該文件是最重要的頭文件之一。例如 向量等等。除了這些該頭文件還定義了和外設寄存器相關的結(jié)構(gòu)體,如: typedefstruct { __IOuint32_tCRL; __IOuint32_tCRH; __IOuint32_tIDR; __IOuint32_tODR; __IOuint32_tBSRR; __IOuint32_tBRR; __IOuint32_tLCKR; }GPIO_TypeDef; 包含了那么多寄存器的定義,那么在應用文件中(例如自己編寫的main源文件)只需要包含 stm32f10x.h即可。 在stm32f10x.h8296行 #ifdefUSE_STDPERIPH_DRIVER #i nclude"stm32f10x_conf.h" #endif 這里定義了#i nclude"stm32f10x_conf.h" system_stm32f10x.c/h 該頭文件也可以稱為外設訪問層的頭文件和源文件。在該文件中可以定義系統(tǒng)的時鐘頻率,定義低速時鐘總線和高速時鐘總線的頻率,其中最關鍵的函數(shù)就是SystemInit()了,這個后面會詳細介紹??傊@兩個文件是新固件庫V3.5的重點,有了它糧也大大簡化了使用stm32的初始化工作。 stm32f10x_conf.h 這個文件和V2版本的庫的內(nèi)容是一樣的,需要使用哪些外設就取消哪些外設的注釋。 stm32f10x_it.c/h 這兩個文件包含了stm32中斷函數(shù),在源文件和頭文件中并沒有把所有的中斷入口函數(shù)都寫出來,而只寫了ARM內(nèi)核的幾個異常中斷,其他的中斷函數(shù)需要用戶自己編寫。stm32f10x_it.c的最后給了這樣一個模板。 /******************************************************************************/ /*STM32F10xPeripheralsInterruptHandlers*/ /*AddheretheInterruptHandlerfortheusedperipheral(s)(PPP),forthe*/ /*availableperipheralinterrupthandlersnamepleaserefertothestartup*/ /*file(startup_stm32f10x_xx.s).*/ /******************************************************************************/ /** *@briefThishandlesPPPinterruptrequest. *@paramNone *@retvalNone */ /*voidPPP_IRQHandler(void) { }*/ 從注釋中的英文提示可以看出,中斷向量的名稱可以從相應的啟動代碼中找出,例如可以 startup_stm32f10x_md.s中找到USART1中斷函數(shù)的名稱——USART1_IRQHandler。其他的中斷函 名可以以此類推,一一獲得,在這里我就不一一復述了。 Libraries文件夾 該文件夾有包含兩個文件夾,一個是src文件夾,另一個是inc文件夾,顧名思義,一個里面放的是元件一個里面放的是頭文件。這兩個文件夾包含了所有的STM32的外設驅(qū)動函數(shù),其實和V2版本也沒有太大的變化。簡單來說,外設的驅(qū)動相當于windows的驅(qū)動函數(shù)API,這些驅(qū)動函數(shù)看到函數(shù)名基本就可以明白這個函數(shù)的作用,例如:GPIO_SetBits可以置位某個IO口,相反GPIO_ResetBits則可以復位某個IO口。我個人認為熟練使用庫可以大大提高編程的效率,同時規(guī)范使用庫函數(shù)也可以提高程序的可讀性,讓團隊中的其他程序員可以快速的明白代碼的作用。 |
評論