STM32學(xué)習(xí)之新建工程模板_第1頁(yè)
STM32學(xué)習(xí)之新建工程模板_第2頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 STM32學(xué)習(xí)之新建程模板前好久沒(méi)寫(xiě)STM32的博客了,主要還是涉及到很多核技術(shù),再加上代碼量巨,懶得整理,就不了了之了。之前的開(kāi)發(fā)的程都是在已有框架上的已有產(chǎn)品中增加新功能,這次我決定從0開(kāi)始,學(xué)習(xí)STM32,從搭建環(huán)境開(kāi)始,到燒錄程序運(yùn)成功,系統(tǒng)的從零開(kāi)始學(xué)習(xí)。本已經(jīng)繪制成功塊STM32的電路版,已經(jīng)將硬件焊接成功,主要器件如下:STM32F407ZET6正點(diǎn)原2.8 LCD MODULE個(gè)攝像頭個(gè)極管本篇博客主要記錄從零創(chuàng)建個(gè)全新的STM32F407的項(xiàng)過(guò)程STM32單機(jī)學(xué)習(xí)資料均來(lái) 正點(diǎn)原 ,僅于學(xué)習(xí),如有侵權(quán)請(qǐng)聯(lián)系我刪除本博客內(nèi)容原創(chuàng),創(chuàng)作不易,轉(zhuǎn)載請(qǐng)注明資料下載資料均來(lái) 正點(diǎn)原,

2、感謝原哥的開(kāi)源奉獻(xiàn)全部資料均來(lái)以上站要下載有兩個(gè):個(gè)是作為主要檔STM32F407最系統(tǒng)板開(kāi)發(fā)指南-庫(kù)函數(shù)版本還有個(gè)是作為庫(kù)函數(shù),全在 A盤(pán) 資料,有需要的在中下載。STM32F4xx固件庫(kù)創(chuàng)建程開(kāi)發(fā)具:Keil uVision5接下來(lái)就跟著檔,從零創(chuàng)建個(gè)STM32的project本次學(xué)習(xí)標(biāo)主要是學(xué)會(huì)STM32F407實(shí)現(xiàn)攝像頭的應(yīng)創(chuàng)建錄所以先創(chuàng)建個(gè)新的空件夾叫:MyCamera然后在MyCamera錄下創(chuàng)建五個(gè)件夾:CORE,FWLIB,OBJ,SYSTEM,USER ,如下圖:于這些件夾名字,實(shí)際上是可以任取的,這樣取名只是為了便識(shí)別。來(lái)存儲(chǔ)特定的類型的件創(chuàng)建程 創(chuàng)建完錄之后,就要?jiǎng)?chuàng)建程了

3、打開(kāi)KeilProjectNew Vison Project然后在彈出來(lái)的界中,選擇我們剛才創(chuàng)建的錄下的的程名稱致,是 ,然后點(diǎn)擊保存。錄下,也就是路徑下,然后輸件名,我這和我.MyCameraUSERUSERMyCamera之后就是彈出來(lái)選擇設(shè)備,我的CPU型號(hào)是所以說(shuō)選擇STM32F407ZETx型號(hào)STM32F407ZET6有關(guān)STM32的型號(hào),正點(diǎn)原的檔中都有解釋,再次感謝原哥然后接下來(lái)的Manager Run-Time Environment 界直接點(diǎn)擊Cancel就了。到此,我們的程框架就創(chuàng)建好了,現(xiàn)在在程,只有個(gè)然后我們?cè)谙到y(tǒng)中點(diǎn)開(kāi)件夾,發(fā)現(xiàn)在USER錄下多了個(gè)件:下的sourc

4、e Group 1Target1MDK5.14成的程件是以為后綴。這個(gè)不能刪除.uvprojxListings 和 Objects 件夾是 MDK 動(dòng)成的件夾,于存放編譯過(guò)程產(chǎn)的中間件。這兩個(gè)件不管它復(fù)制庫(kù)函數(shù)件框架已經(jīng)建好,之后就是將官的庫(kù)函數(shù)復(fù)制到我們的項(xiàng)件了。件復(fù)制FWLib第個(gè)是:打開(kāi)官固件庫(kù)包,定位到我們之前準(zhǔn)備好的固件庫(kù)包的錄:下,STM32F4xx_DSP_StdPeriph_Lib_V1.4.0LibrariesSTM32F4xx_StdPeriph_Driver將錄下的 src,inc 件夾 copy 到我們剛才建的件夾下。FWLibsrc 存放的是固件庫(kù)的.c 件,inc

5、存放的是對(duì)應(yīng)的.h 件,還有個(gè)html件是個(gè)說(shuō)明件CODE打開(kāi)官固件庫(kù)包下STM32F4xx_DSP_StdPeriph_Lib_V1.4.0LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesarm將件然后定位到錄復(fù)制到 CORE 錄下。startup_stm32f40_41xxx.sSTM32F4xx_DSP_StdPeriph_Lib_V1.4.0LibrariesCMSISInclud將的 四 個(gè) 頭件 :core_cm4.h、core_cm4_simd.h 、core_cmFunc.h 以及core_cmInstr.h同樣復(fù)制到 CORE 錄下

6、。復(fù)制完的CODE結(jié)構(gòu)如下圖:簡(jiǎn)單的說(shuō)明下,在件夾下有很多.s件,主要是和芯有關(guān),主要于啟動(dòng)armUSER接下來(lái)我們要復(fù)制程模板需要的些其他頭件和源件到我們程。先定位到錄:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0LibrariesCMSISDeviceSTSTM32F4xxInclude將的 2 個(gè)頭件和復(fù)制到USER錄之下。stm32f4xx.hsystem_stm32f4xx.h這兩個(gè)頭件是STM32F4 程常關(guān)鍵的兩個(gè)頭件。然后進(jìn)錄,STM32F4xx_DSP_StdPeriph_Lib_V1.4.0ProjectSTM32F4xx_StdPeriph_Tem

7、plates將 錄 下 的 5 個(gè) 件復(fù)制到 錄下。如下圖, ,system_stm32f4xx.cstm32f4xx_it.hmain.cstm32f4xx_conf.hstm32f4xx_it.cUSER 添加到程前的步驟,我們已經(jīng)將需要的固件庫(kù)相關(guān)件復(fù)制到了我們的程錄下下我們還要將這些件加我們的程中去。設(shè)置Groups在MDK5中,右鍵點(diǎn)擊,選擇,Manage Project ItemsTarget1然后在欄,我們雙擊將名字修改為,然后在欄刪掉個(gè),Source Group 1Project TargetsTargetTemplateGroups建三個(gè) Groups:。然后點(diǎn)擊 OK,可以

8、看到我們的名字以及 情況如下圖:GroupsUSER,CORE,FWLIBTargetGroups添加件FWLIB下我們往 Group 添加我們需要的件。我們按照上邊的法, 右鍵點(diǎn)擊點(diǎn)擊Tempate ,選擇.Manage Project Items然后選擇需要添加件的 Group,這第步我們選擇,然后點(diǎn)擊右邊的Add FilesFWLIB定位到我們剛才建的錄下,將所有的件選中(Ctrl+A),然后點(diǎn)擊,然后.CloseFWLIBsrcAdd可以看到 Files 列表下包含我們添加的件,如下圖這有個(gè)件 stm32f4xx_fmc.c 較特殊。這個(gè)件是 STM32F42 和 STM32F43 系

9、列才到,所以我們這要把它刪掉(注意是 stm32f4xx_fmc.c 要?jiǎng)h掉,不要?jiǎng)h掉 stm32f4xx_fsmc.c)。這需要說(shuō)明下,對(duì)于我們寫(xiě)代碼,如果我們只到了其中的某個(gè)外設(shè),我們就可以不添加沒(méi)有到的外設(shè)的庫(kù)件。例如我只 GPIO,我可以只添加stm32f4xx_gpio.c其他的可以不添加。這我們?nèi)刻砑舆M(jìn)來(lái)是為了后便,不每次添加,當(dāng)然這樣的壞處是程太,編譯起來(lái)速度慢,戶可以選擇。CODE/USER之后我們添加件到和中USERCORE下需要添加的件為COREstartup_stm32f40_41xxx.s*注意:默認(rèn)添加的時(shí)候件類型為.c,也就是添加 startup_stm32f40

10、_41xxx.s 啟動(dòng)件的時(shí)候,你需要選擇件類型為 All files才能看得到這個(gè)件 *錄下需要添加的件為,。system_stm32f4xx.cUSERmain.cstm32f4xx_it.c這樣我們需要添加的件已經(jīng)添加到我們的程中去了,最后點(diǎn)擊 OK,回到程主界。如下圖設(shè)置頭件接下來(lái)要在 MDK 設(shè)置頭件存放路徑。也就是告訴 MDK 到那些錄下去尋找包含了的頭件。這步驟常重要。如果沒(méi)有設(shè)置頭件路徑,那么程會(huì)出現(xiàn)報(bào)錯(cuò)頭件路徑找不到。設(shè)置錄先進(jìn) PATH 配置界,選擇標(biāo)簽,然后點(diǎn)擊Include PathsC/C+在彈出的界中,點(diǎn)擊,然后添加點(diǎn)擊添加路徑New(Insert)這我們需要添加的

11、頭件路徑包括:CORE, USER, FWLIBinc這家務(wù)必要仔細(xì),固件庫(kù)存放的頭件錄是FWLIBinc,不是 FWLIBsrc。很多朋友都是這弄錯(cuò)導(dǎo)致報(bào)很多奇怪的錯(cuò)誤。添加完成之后如下圖添加標(biāo)識(shí)符接下來(lái)對(duì)于 STM32F40 系列的程,還需要添加個(gè)全局宏定義標(biāo)識(shí)符。添加法是點(diǎn)擊魔術(shù)棒之后,進(jìn) C/C+選項(xiàng)卡,然后在 Define 輸框連輸:STM32F40_41xxx,USE_STDPERIPH_DRIVER 注意這是兩個(gè)標(biāo)識(shí)符如下圖:和 USE_STDPERIPH_DRIVER,他們之間是逗號(hào)隔開(kāi)的。STM32F40_41xxx編譯接下來(lái)我們要編譯程,在編譯之前我們先要選擇編譯中間件編譯

12、后存放錄。法是點(diǎn)擊魔術(shù)棒 ,然后選擇選項(xiàng)下的錄。OutputSelect folder for objects然后選擇錄為我們之前新建的OBJ同時(shí)將下的三個(gè)選項(xiàng)框都勾上,如下圖:這說(shuō)明下勾選的意義。選項(xiàng)選上是要求編譯之后成 HEX 件。Create HEX File選項(xiàng)選上是便我們查看程中的些函數(shù)變量定義。Browse Information然后更換成下的代碼main.c#include stm32f4xx.hvoid Delay(_IO uint32_t nCount);void Delay(_IO uint32_t nCount)while(nCount-)int main(void)GP

13、IO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructur

14、e.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOF, &GPIO_InitStructure);while(1)GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);Delay(0 x7FFFFF);GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);Delay(0 x7FFFFF);同時(shí)還需要將分組下的件內(nèi)容清空。stm32f4xx_it.cUSER或者刪掉其中的 32 對(duì)頭件的引以及 144 函數(shù)內(nèi)容。SysTick_Handlermain.h然后點(diǎn)擊編譯按鈕編譯程,可以看到程編譯通過(guò)沒(méi)

15、有任何錯(cuò)誤和警告。Build(F7)恭喜,到這,個(gè)基于固件庫(kù) V1.4 的程模板就建完成,同時(shí)在程的 OBJ 錄下成了對(duì)應(yīng)的 hex 件。系統(tǒng)時(shí)鐘設(shè)置還有個(gè)常重要的關(guān)鍵點(diǎn),就是系統(tǒng)時(shí)鐘的配置,有關(guān)系統(tǒng)時(shí)鐘,檔中4.3節(jié)有詳細(xì)的說(shuō)明這我們要修改件,把 PLL 第級(jí)分頻系數(shù) M 修改為 8,這樣達(dá)到主時(shí)鐘頻率為 168MHz。System_stm32f4xx.c在316處修改如下: /* PLL Parameters */#if defined (STM32F40_41xxx) | defined (STM32F427_437xx) | defined (STM32F429_439xx) | de

16、fined (STM32F401xx)/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */#define PLL_M8#else /* STM32F411xE */#if defined (USE_HSE_BYPASS)#define PLL_M#else /* STM32F411xE */#define PLL_M 168#endif /* USE_HSE_BYPASS */#endif /* STM32F40_41xxx | STM32F427_437xx | STM32F429_439xx | STM32F401xx */PLL

17、_M 這將25修改為 8,這樣我們的系統(tǒng)時(shí)鐘就是 168MHz。詳細(xì)原因我們后 4.3 節(jié)會(huì)講解。同時(shí),我們要在修改外部時(shí)鐘值為 8MHz,因?yàn)槲覀兊耐獠克贂r(shí)鐘的晶振為 8M.HSE_VALUEstm32f4xx.h具體修改法如下:在概123處,將修改成(uint32_t)8000000)(uint32_t)25000000)#if !defined (HSE_VALUE)#define HSE_VALUE (uint32_t)25000000) /*! Value of the External oscillator in Hz */#endif /* HSE_VALUE */家定要在對(duì)應(yīng)的

18、配置件中,找到相應(yīng)的代碼,修改為符合我們硬件的值即可。實(shí)際上經(jīng)過(guò)前的步驟,我們的程模板已經(jīng)建完成。但是在 正點(diǎn)原 提供的實(shí)驗(yàn)代碼中,每個(gè)實(shí)驗(yàn)都有個(gè)件夾SYSTEM下有 3 個(gè)錄分別為,存放的是每個(gè)實(shí)驗(yàn)都要使到的共代碼。sys,usart,delay該代碼是由編寫(xiě),該代碼的原理在在檔第五章有詳細(xì)的講解ALIENTEK我們這只是引到程中,便后的實(shí)驗(yàn)建程。在原哥提供的資料中錄下的件夾,將件夾移動(dòng)到我們的程下SYSTEM實(shí)驗(yàn)0 Template程模板SYSTEM然后在MDK5中,添加到我們的程中。根據(jù)前邊的教程,完成配置后如下圖:接下來(lái)我們將對(duì)應(yīng)的三個(gè)錄(sys,usart,delay)加到 PATH

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論