IAR forARM 建立第一个STM32F051的工程
生活随笔
收集整理的這篇文章主要介紹了
IAR forARM 建立第一个STM32F051的工程
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一.自己畫了個(gè)板子,打樣后,自己測(cè)試。部分原理圖如下:
二.現(xiàn)在建立工程,編寫程序來點(diǎn)亮這5個(gè)LED燈。
1.好的程序員自己寫程序,優(yōu)秀的程序員偷別人的程序。所以從ST官網(wǎng)上下載相應(yīng)的資料en.stm32f0_stdperiph_lib.ZIP,解壓到當(dāng) 前文件夾得到STM32F0xx_StdPeriph_Lib_V1.5.0文件夾,打開后文件目錄如下圖:
其中,_htmresc(html rescource)文件夾的目錄下就三張圖片 ? ? ? ? ? ??
? ? ? ? ???Utilities文件夾下是ST公司的評(píng)估板的應(yīng)用Examples以及第三方支持工具補(bǔ)丁,暫時(shí)不關(guān)心; ? ? ? ? ? ? ?MCD-ST?Liberty?SW?License?Agreement.pdf和 V2Release_Notes(html)顧名思義,暫時(shí)也不關(guān)心; ? ? ? ? ?stm32f0xx_stdperiph_lib_um這個(gè)文件是介紹如何使用STM32F0xx Standard Peripherals Firmware Library以及如何建立 ? ? ? ? ?工程,需要重點(diǎn)關(guān)注; ? ? ? ? ? ??Libraries文件夾里是CMSIS庫(kù)文件、STM32F0xx Standard Peripherals Firmware Library和STM32F0xx_CPAL_Driver( ? ? ? ? ? ? 這個(gè)是干嘛的,現(xiàn)在我不是很清楚),該文件夾里的內(nèi)容也需要重點(diǎn)關(guān)注; ? ? ? ? ? ??Projects文件夾下是一些工程模板和STM32F0xx_StdPeriph_Examples,該文件夾下的內(nèi)容也需要重點(diǎn)關(guān)注;
2.說了那么多,可以知道ST給出的用IAR建立的工程模板在\:\STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Templates\EWARM 目錄下,如下圖:
箭頭所指的Project就是ST官網(wǎng)給的模板工程,用IAR打開它看看。
從圖上可以看出文件目錄結(jié)構(gòu)有四個(gè)Group:CMSIS存放的是STM32F0xx CMSIS files;StdPeriph_Driver存放的是STM32F0xx Standard Peripheral's Driver files; User存放的是main.c和stm32f0xx_it.c(stm32f0xx中斷處理文件);Output程序輸出Group。
Tips:在workspace toolbar選擇工程配置,可以改變當(dāng)前編譯的對(duì)象(device 型號(hào),默認(rèn)是stm32f051),如下圖:
注意觀察上圖中箭頭所指地方的變化。
3.因?yàn)槭且TM32F051的工程,所以我們選擇STM32F051來編譯一下。在Project - STM32F051上右擊,選擇Rebulid All,觀察Message窗口的報(bào)錯(cuò)。
按照上圖所示操作后,我們驚訝的發(fā)現(xiàn)編譯器報(bào)了一堆錯(cuò)誤,如右上圖。不過別擔(dān)心我們一個(gè)一個(gè)錯(cuò)誤來定位解決。
4.先看第一個(gè)錯(cuò)誤,
Fatal Error(致命錯(cuò)誤):找不到源文件stm32f0xx.h,下面四行是編譯器的四個(gè)搜索目錄。大家應(yīng)該注意到了,第一個(gè)目錄就是工程文件的上一級(jí)目錄,其他三個(gè)目錄都是IAR編譯器的安裝文件的相關(guān)目錄(為什么編譯器會(huì)去找這幾個(gè)目錄,我也不是很清楚),結(jié)果就是都沒有找到stm32f0xx.h這個(gè)文件。我們可以實(shí)際點(diǎn)開相關(guān)的目錄來查看,也沒有stm32f0xx.h這個(gè)文件。
Tips:既然編譯器要找這個(gè)文件,說明有那個(gè)文件里include了stm32f0xx.h。雙擊上圖中的Fatal Error或者四個(gè)searched目錄行,可以在編輯窗口打開編譯出錯(cuò)的第一地方,可以看見是什么文件include了stm32f0xx.h如下圖:
可以看見是main.h里面include了stm32f0xx.h。
5.解決第一個(gè)錯(cuò)誤,首先要找到源文件stm32f0xx.h的所在目錄,然后再告訴編譯器這個(gè)目錄,這樣編譯器在編譯的時(shí)候就會(huì)在相應(yīng)的目錄里找尋目標(biāo)文件。\:\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries\CMSIS\Device\ST\STM32F0xx\Include這個(gè)目錄下有stm32f0xx.h。如下圖:
然后再告訴編譯器,編譯的時(shí)候,要搜索這個(gè)目錄。在Addtional include directories下添加路徑,操作如下:
點(diǎn)擊OK,我們?cè)賮砭幾g看看結(jié)果如何。
Tips:這里有必要說明一下相對(duì)路徑和絕對(duì)路徑,絕對(duì)路徑是說嚴(yán)格按照所給的路徑,比如C:\Desktop\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries\CMSIS\Device\ST\STM32F0xx\Include, 編譯器會(huì)嚴(yán)格按照這個(gè)順序一層一層的找。假設(shè)那天你把工程文件拷貝到另一個(gè)文件夾里,那么是不是意味著需要要重新添加或者改變路徑呢?這樣會(huì)很麻煩。所以用相對(duì)路徑就不會(huì)有這個(gè)問題了,改的方法如下:
這樣就不會(huì)出現(xiàn)工程拷貝到另外一個(gè)目錄,需要再添加文件路徑的問題。(左上圖中第三個(gè)$TOOLKIT_DIR$\..\..\這個(gè)是干嘛的,我也不是很清楚)
會(huì)發(fā)現(xiàn),錯(cuò)誤還是24個(gè),但是第一個(gè)錯(cuò)誤已經(jīng)不是找不到源文件stm32f0xx.h了,而是在stm32f0xx.h里沒有選擇相應(yīng)的device型號(hào)(是STM32F051還是STM32F030呢?)。
6.解決新的第一個(gè)錯(cuò)誤,雙擊上圖中的箭頭所指的錯(cuò)誤,在編輯窗口中打開了錯(cuò)誤的位置,如左下圖:
如右上圖中所示,把#define STM32F051的這行宏定義的注釋符去掉,就等于把target device設(shè)置成了STM32F051。保存save all,再重新編譯,看看結(jié)果如何。
可以看出,錯(cuò)誤只剩下21個(gè),并且搜索路徑變成了5個(gè),多出的一個(gè)就是我之前新添加的。可以發(fā)現(xiàn)這些錯(cuò)都是找不到StdPeriph_Driver這個(gè)Group里的stm32f0xx_ppp.c文件對(duì)應(yīng)的stm32f0xx_ppp.h文件。 這些文件在下圖所示的目錄下:
把這個(gè)路徑添加以下,選用相對(duì)路徑如右上圖,再編譯觀察結(jié)果如下圖:
從上圖可以看出,只有一個(gè)錯(cuò)誤,但是好幾百個(gè)警告。并且編譯器的第一個(gè)就是警告,這個(gè)警告是為我們少了一個(gè)宏定義,把他的注釋符去掉就可以了。如下圖:
關(guān)于這個(gè)問題的說明在 二.1里提到的stm32f0xx_stdperiph_lib_um這個(gè)文件里有說明。
Tips:注意解決錯(cuò)誤或者warning要從第一個(gè)地方下手,這在學(xué)C語(yǔ)言的時(shí)候已經(jīng)知曉的,此處不再贅述。
從上圖中得知,錯(cuò)誤還剩下21個(gè),但其實(shí)是一個(gè)錯(cuò)誤,就是找不到stm32f0xx_conf.h,這個(gè)文件在如下圖所示的目錄中:
把他添加到編譯器的搜索目錄下,如下圖:
再保存,再編譯,看看結(jié)果如何。
終于沒有錯(cuò)誤了。
三、添加程序,點(diǎn)亮LED燈。
1.開main.c添加如下程序,
2.編譯,下載發(fā)現(xiàn)LED燈亮了。
Tips:以上是在ST官方的的工程基礎(chǔ)上修改的,實(shí)現(xiàn)點(diǎn)亮LED燈。但是這個(gè)工程里包含很多的文件分散在很多個(gè)不同的目錄里,使用起來很不方便。比如需要把整個(gè)工程發(fā)給別人時(shí),同時(shí)要把好多 不相關(guān)的文件發(fā)過去。還有一些相關(guān)的設(shè)置,我們也不是很清楚。下面,我們來跟深入的理解文件的目錄結(jié)果,選擇必要的文件。從零開始建立工程。
四、從零開始建立STM32F051工程。 1.在桌面新建一個(gè)名為“01STM32F051”的文件夾,這里面要存放很多各種各樣源文件、頭文件、工程文件以及編譯輸出的文件。參考ST官方工程的Group架構(gòu),我們新建名為“CMSIS”、“User”和“App”三個(gè)文件夾,其中App用來存放用戶自己開發(fā)的應(yīng)用程序文件,在“App”文件夾下新建“inc”和“src”兩個(gè)文件夾,“inc”用來存放頭文件,“src”用來存放源文件。拷貝C:\\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries路徑下的(如下圖)“STM32F0xx_StdPeriph_Driver"文件夾到”01STM32F051"下。
此時(shí)“01STM32F051”文件夾下的目錄結(jié)構(gòu)如下:
2.現(xiàn)在除了“STM32F0xx_StdPeriph_Driver"文件夾,其它的文件夾里面都是空的,現(xiàn)在我們往每個(gè)文件夾里添加文件。?打開下圖中的stm32f0xx_stdperiph_lib_um這個(gè)文件,在Main Page里面點(diǎn)擊STM32F0xx_CMSIS files.
在右上圖中,可以看到CMSIS包含哪些文件,以及每個(gè)文件的介紹以及一些簡(jiǎn)單的用法。現(xiàn)在我們就拷貝右上圖中的4個(gè)文件到CMSIS文件夾里。其中stm32f0xx.h和system_stm32f0xx.h這兩個(gè)頭文件在如下圖的目錄下,
其中system_stm32f0xx.c在如下圖目錄下,
其中startup_stm32f051.s在如下圖的目錄下,注意下圖中的中的arm、iar、gcc_ride7和TrueSTUDIO都是編譯器,每個(gè)編譯器的device startup file不一樣。我們用的是iar所以選擇下圖箭頭所指示目錄的下的 startup_stm32f051.s文件。
Tips:細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)上圖中有startup_stm32f0xx.s和startup_stm32f0xx_ld.s這兩個(gè)文件,這兩個(gè)文件是干嘛的,建立工程需不需要用,我也不是很清楚。先不管,等一下建立工程編譯的時(shí)候,看看有沒有什么異常。
3.拷貝main.c、main.h、stm32f0xx_conf.h、stm32f0xx_it.c和stm32f0xx_it.h到User文件夾中,這些文件在下圖所示的路徑中,
細(xì)心的朋友也許會(huì)發(fā)現(xiàn)上圖中的目錄下也有一個(gè)system_stm32f0xx.c這個(gè)文件。那么這個(gè)文件和我們已經(jīng)拷貝到CMSIS這個(gè)文件夾的system_stm32f0xx.c文件有什么區(qū)別呢?(用記事本打開這兩個(gè)文件比較 發(fā)現(xiàn),除了被注釋掉的說明部分有些區(qū)別外,其代碼部分一樣)
4.打開IAR建立一個(gè)工程,按照下圖的步驟。
這時(shí)候再看看”01STM32F051“這個(gè)文件夾下
5.在工程里添加4個(gè)Group,CMSIS,StdPeriph_Driver和User,如下圖,然后記得要保存。
6.往每個(gè)Group里添加文件,把startup_stm32f051.s和system_stm32f0xx.c添加CMSIS這個(gè)Group里。如下圖,
Tips:右上圖的兩個(gè).h文件不用添加到Group里。如果不添加的話,那么編譯器在編譯的時(shí)候怎么找到這兩個(gè)文件呢?還記得前一部分我們說的向編譯器里添加搜索路徑的內(nèi)容,就是通過這樣的方式,把文件相互關(guān)聯(lián)起來。
7.往StdPeriph_Driver這個(gè)Group里添加文件,如下圖,
8.往User這個(gè)Group里添加文件,如下圖,
9.保存一下,現(xiàn)在我們來對(duì)工程進(jìn)行一些設(shè)置。
選擇Core和Device,stm32f051c8t6是cortex M0內(nèi)核的,如下圖,
改為相對(duì)路徑,另外C:\\Desktop\01STM32F051\App\inc這個(gè)目錄里雖然什么都沒有,但是以后開發(fā)的時(shí)候會(huì)在里面放置application.h文件,所以現(xiàn)在也把他的目錄添加編譯器的搜素目錄下。
因?yàn)槲业臒浌ぞ呤荢T-LINK,所以選擇選擇ST-LINK,大家可以根據(jù)自己的燒錄工具來選擇相應(yīng)的Driver。
10.保存一下,然后按下圖操作,
11.按下圖所示插入圖中代碼,編譯鏈接,下載,
12.單步調(diào)試至如下圖是,5個(gè)LED燈全亮。
13.繼續(xù)單步調(diào)試,則5個(gè)LED燈全滅,程序停在while(1)處。
Tips:點(diǎn)開main.c前面的+號(hào),可以看見main.c文件里包含(包括嵌套包含)的頭文件,如左下圖;在任意一個(gè)頭文件上右擊選擇File Properties
可以看到文件的location,這個(gè)是iar編譯器的安裝目錄。(在安裝iar時(shí)或者iar后,可以隨時(shí)選擇安裝iar支持的各個(gè)廠商的各個(gè)型號(hào)的device,否則編譯器可能無法為我們所用。)這個(gè)從這個(gè)文件的名稱可以看出它的作用,二者結(jié)合有助于我們理解編譯器和我們的工程里的文件是怎么緊密結(jié)合在一起的。
Tips:若設(shè)置工程時(shí),不勾選左下圖中的Use CMSIS選項(xiàng),則編譯會(huì)提示右下圖的錯(cuò)誤。
為什么呢?是因?yàn)閏ore_cm0.h是CMSIS的一個(gè)重要文件,但是呢?我們告訴編譯器的搜索路徑里根本沒有這個(gè)文件,所以會(huì)報(bào)錯(cuò)。解決的方法1:勾選Use CMSIS選項(xiàng),讓編譯器用iar自己安裝時(shí)一起下載的core_cmo.h文件。解決方法2:其實(shí)ST的官方資料里,已經(jīng)給出這些必要的文件。我們可以把這些文件拷貝到工程目錄下,或者工程目錄下新建的或者任意的文件夾下,然后把這目錄添加到編譯器的搜索路徑,就可以解決問題。ST官方的打包資料里的相應(yīng)文件在下圖所示的目錄里,
Tips:更多的編譯原理以及相應(yīng)設(shè)置使用文件,我也在學(xué)習(xí)中,需要繼續(xù)深入。
二.現(xiàn)在建立工程,編寫程序來點(diǎn)亮這5個(gè)LED燈。
1.好的程序員自己寫程序,優(yōu)秀的程序員偷別人的程序。所以從ST官網(wǎng)上下載相應(yīng)的資料en.stm32f0_stdperiph_lib.ZIP,解壓到當(dāng) 前文件夾得到STM32F0xx_StdPeriph_Lib_V1.5.0文件夾,打開后文件目錄如下圖:
其中,_htmresc(html rescource)文件夾的目錄下就三張圖片 ? ? ? ? ? ??
? ? ? ? ???Utilities文件夾下是ST公司的評(píng)估板的應(yīng)用Examples以及第三方支持工具補(bǔ)丁,暫時(shí)不關(guān)心; ? ? ? ? ? ? ?MCD-ST?Liberty?SW?License?Agreement.pdf和 V2Release_Notes(html)顧名思義,暫時(shí)也不關(guān)心; ? ? ? ? ?stm32f0xx_stdperiph_lib_um這個(gè)文件是介紹如何使用STM32F0xx Standard Peripherals Firmware Library以及如何建立 ? ? ? ? ?工程,需要重點(diǎn)關(guān)注; ? ? ? ? ? ??Libraries文件夾里是CMSIS庫(kù)文件、STM32F0xx Standard Peripherals Firmware Library和STM32F0xx_CPAL_Driver( ? ? ? ? ? ? 這個(gè)是干嘛的,現(xiàn)在我不是很清楚),該文件夾里的內(nèi)容也需要重點(diǎn)關(guān)注; ? ? ? ? ? ??Projects文件夾下是一些工程模板和STM32F0xx_StdPeriph_Examples,該文件夾下的內(nèi)容也需要重點(diǎn)關(guān)注;
2.說了那么多,可以知道ST給出的用IAR建立的工程模板在\:\STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Templates\EWARM 目錄下,如下圖:
箭頭所指的Project就是ST官網(wǎng)給的模板工程,用IAR打開它看看。
從圖上可以看出文件目錄結(jié)構(gòu)有四個(gè)Group:CMSIS存放的是STM32F0xx CMSIS files;StdPeriph_Driver存放的是STM32F0xx Standard Peripheral's Driver files; User存放的是main.c和stm32f0xx_it.c(stm32f0xx中斷處理文件);Output程序輸出Group。
Tips:在workspace toolbar選擇工程配置,可以改變當(dāng)前編譯的對(duì)象(device 型號(hào),默認(rèn)是stm32f051),如下圖:
注意觀察上圖中箭頭所指地方的變化。
3.因?yàn)槭且TM32F051的工程,所以我們選擇STM32F051來編譯一下。在Project - STM32F051上右擊,選擇Rebulid All,觀察Message窗口的報(bào)錯(cuò)。
按照上圖所示操作后,我們驚訝的發(fā)現(xiàn)編譯器報(bào)了一堆錯(cuò)誤,如右上圖。不過別擔(dān)心我們一個(gè)一個(gè)錯(cuò)誤來定位解決。
4.先看第一個(gè)錯(cuò)誤,
Fatal Error(致命錯(cuò)誤):找不到源文件stm32f0xx.h,下面四行是編譯器的四個(gè)搜索目錄。大家應(yīng)該注意到了,第一個(gè)目錄就是工程文件的上一級(jí)目錄,其他三個(gè)目錄都是IAR編譯器的安裝文件的相關(guān)目錄(為什么編譯器會(huì)去找這幾個(gè)目錄,我也不是很清楚),結(jié)果就是都沒有找到stm32f0xx.h這個(gè)文件。我們可以實(shí)際點(diǎn)開相關(guān)的目錄來查看,也沒有stm32f0xx.h這個(gè)文件。
Tips:既然編譯器要找這個(gè)文件,說明有那個(gè)文件里include了stm32f0xx.h。雙擊上圖中的Fatal Error或者四個(gè)searched目錄行,可以在編輯窗口打開編譯出錯(cuò)的第一地方,可以看見是什么文件include了stm32f0xx.h如下圖:
可以看見是main.h里面include了stm32f0xx.h。
5.解決第一個(gè)錯(cuò)誤,首先要找到源文件stm32f0xx.h的所在目錄,然后再告訴編譯器這個(gè)目錄,這樣編譯器在編譯的時(shí)候就會(huì)在相應(yīng)的目錄里找尋目標(biāo)文件。\:\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries\CMSIS\Device\ST\STM32F0xx\Include這個(gè)目錄下有stm32f0xx.h。如下圖:
然后再告訴編譯器,編譯的時(shí)候,要搜索這個(gè)目錄。在Addtional include directories下添加路徑,操作如下:
點(diǎn)擊OK,我們?cè)賮砭幾g看看結(jié)果如何。
Tips:這里有必要說明一下相對(duì)路徑和絕對(duì)路徑,絕對(duì)路徑是說嚴(yán)格按照所給的路徑,比如C:\Desktop\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries\CMSIS\Device\ST\STM32F0xx\Include, 編譯器會(huì)嚴(yán)格按照這個(gè)順序一層一層的找。假設(shè)那天你把工程文件拷貝到另一個(gè)文件夾里,那么是不是意味著需要要重新添加或者改變路徑呢?這樣會(huì)很麻煩。所以用相對(duì)路徑就不會(huì)有這個(gè)問題了,改的方法如下:
這樣就不會(huì)出現(xiàn)工程拷貝到另外一個(gè)目錄,需要再添加文件路徑的問題。(左上圖中第三個(gè)$TOOLKIT_DIR$\..\..\這個(gè)是干嘛的,我也不是很清楚)
會(huì)發(fā)現(xiàn),錯(cuò)誤還是24個(gè),但是第一個(gè)錯(cuò)誤已經(jīng)不是找不到源文件stm32f0xx.h了,而是在stm32f0xx.h里沒有選擇相應(yīng)的device型號(hào)(是STM32F051還是STM32F030呢?)。
6.解決新的第一個(gè)錯(cuò)誤,雙擊上圖中的箭頭所指的錯(cuò)誤,在編輯窗口中打開了錯(cuò)誤的位置,如左下圖:
如右上圖中所示,把#define STM32F051的這行宏定義的注釋符去掉,就等于把target device設(shè)置成了STM32F051。保存save all,再重新編譯,看看結(jié)果如何。
可以看出,錯(cuò)誤只剩下21個(gè),并且搜索路徑變成了5個(gè),多出的一個(gè)就是我之前新添加的。可以發(fā)現(xiàn)這些錯(cuò)都是找不到StdPeriph_Driver這個(gè)Group里的stm32f0xx_ppp.c文件對(duì)應(yīng)的stm32f0xx_ppp.h文件。 這些文件在下圖所示的目錄下:
把這個(gè)路徑添加以下,選用相對(duì)路徑如右上圖,再編譯觀察結(jié)果如下圖:
從上圖可以看出,只有一個(gè)錯(cuò)誤,但是好幾百個(gè)警告。并且編譯器的第一個(gè)就是警告,這個(gè)警告是為我們少了一個(gè)宏定義,把他的注釋符去掉就可以了。如下圖:
關(guān)于這個(gè)問題的說明在 二.1里提到的stm32f0xx_stdperiph_lib_um這個(gè)文件里有說明。
Tips:注意解決錯(cuò)誤或者warning要從第一個(gè)地方下手,這在學(xué)C語(yǔ)言的時(shí)候已經(jīng)知曉的,此處不再贅述。
再保存,然后編譯,再查看結(jié)果。如下圖:
從上圖中得知,錯(cuò)誤還剩下21個(gè),但其實(shí)是一個(gè)錯(cuò)誤,就是找不到stm32f0xx_conf.h,這個(gè)文件在如下圖所示的目錄中:
把他添加到編譯器的搜索目錄下,如下圖:
再保存,再編譯,看看結(jié)果如何。
終于沒有錯(cuò)誤了。
三、添加程序,點(diǎn)亮LED燈。
1.開main.c添加如下程序,
2.編譯,下載發(fā)現(xiàn)LED燈亮了。
Tips:以上是在ST官方的的工程基礎(chǔ)上修改的,實(shí)現(xiàn)點(diǎn)亮LED燈。但是這個(gè)工程里包含很多的文件分散在很多個(gè)不同的目錄里,使用起來很不方便。比如需要把整個(gè)工程發(fā)給別人時(shí),同時(shí)要把好多 不相關(guān)的文件發(fā)過去。還有一些相關(guān)的設(shè)置,我們也不是很清楚。下面,我們來跟深入的理解文件的目錄結(jié)果,選擇必要的文件。從零開始建立工程。
四、從零開始建立STM32F051工程。 1.在桌面新建一個(gè)名為“01STM32F051”的文件夾,這里面要存放很多各種各樣源文件、頭文件、工程文件以及編譯輸出的文件。參考ST官方工程的Group架構(gòu),我們新建名為“CMSIS”、“User”和“App”三個(gè)文件夾,其中App用來存放用戶自己開發(fā)的應(yīng)用程序文件,在“App”文件夾下新建“inc”和“src”兩個(gè)文件夾,“inc”用來存放頭文件,“src”用來存放源文件。拷貝C:\\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries路徑下的(如下圖)“STM32F0xx_StdPeriph_Driver"文件夾到”01STM32F051"下。
此時(shí)“01STM32F051”文件夾下的目錄結(jié)構(gòu)如下:
2.現(xiàn)在除了“STM32F0xx_StdPeriph_Driver"文件夾,其它的文件夾里面都是空的,現(xiàn)在我們往每個(gè)文件夾里添加文件。?打開下圖中的stm32f0xx_stdperiph_lib_um這個(gè)文件,在Main Page里面點(diǎn)擊STM32F0xx_CMSIS files.
在右上圖中,可以看到CMSIS包含哪些文件,以及每個(gè)文件的介紹以及一些簡(jiǎn)單的用法。現(xiàn)在我們就拷貝右上圖中的4個(gè)文件到CMSIS文件夾里。其中stm32f0xx.h和system_stm32f0xx.h這兩個(gè)頭文件在如下圖的目錄下,
其中system_stm32f0xx.c在如下圖目錄下,
其中startup_stm32f051.s在如下圖的目錄下,注意下圖中的中的arm、iar、gcc_ride7和TrueSTUDIO都是編譯器,每個(gè)編譯器的device startup file不一樣。我們用的是iar所以選擇下圖箭頭所指示目錄的下的 startup_stm32f051.s文件。
Tips:細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)上圖中有startup_stm32f0xx.s和startup_stm32f0xx_ld.s這兩個(gè)文件,這兩個(gè)文件是干嘛的,建立工程需不需要用,我也不是很清楚。先不管,等一下建立工程編譯的時(shí)候,看看有沒有什么異常。
3.拷貝main.c、main.h、stm32f0xx_conf.h、stm32f0xx_it.c和stm32f0xx_it.h到User文件夾中,這些文件在下圖所示的路徑中,
細(xì)心的朋友也許會(huì)發(fā)現(xiàn)上圖中的目錄下也有一個(gè)system_stm32f0xx.c這個(gè)文件。那么這個(gè)文件和我們已經(jīng)拷貝到CMSIS這個(gè)文件夾的system_stm32f0xx.c文件有什么區(qū)別呢?(用記事本打開這兩個(gè)文件比較 發(fā)現(xiàn),除了被注釋掉的說明部分有些區(qū)別外,其代碼部分一樣)
4.打開IAR建立一個(gè)工程,按照下圖的步驟。
這時(shí)候再看看”01STM32F051“這個(gè)文件夾下
5.在工程里添加4個(gè)Group,CMSIS,StdPeriph_Driver和User,如下圖,然后記得要保存。
6.往每個(gè)Group里添加文件,把startup_stm32f051.s和system_stm32f0xx.c添加CMSIS這個(gè)Group里。如下圖,
Tips:右上圖的兩個(gè).h文件不用添加到Group里。如果不添加的話,那么編譯器在編譯的時(shí)候怎么找到這兩個(gè)文件呢?還記得前一部分我們說的向編譯器里添加搜索路徑的內(nèi)容,就是通過這樣的方式,把文件相互關(guān)聯(lián)起來。
7.往StdPeriph_Driver這個(gè)Group里添加文件,如下圖,
8.往User這個(gè)Group里添加文件,如下圖,
9.保存一下,現(xiàn)在我們來對(duì)工程進(jìn)行一些設(shè)置。
選擇Core和Device,stm32f051c8t6是cortex M0內(nèi)核的,如下圖,
改為相對(duì)路徑,另外C:\\Desktop\01STM32F051\App\inc這個(gè)目錄里雖然什么都沒有,但是以后開發(fā)的時(shí)候會(huì)在里面放置application.h文件,所以現(xiàn)在也把他的目錄添加編譯器的搜素目錄下。
因?yàn)槲业臒浌ぞ呤荢T-LINK,所以選擇選擇ST-LINK,大家可以根據(jù)自己的燒錄工具來選擇相應(yīng)的Driver。
10.保存一下,然后按下圖操作,
11.按下圖所示插入圖中代碼,編譯鏈接,下載,
12.單步調(diào)試至如下圖是,5個(gè)LED燈全亮。
13.繼續(xù)單步調(diào)試,則5個(gè)LED燈全滅,程序停在while(1)處。
Tips:點(diǎn)開main.c前面的+號(hào),可以看見main.c文件里包含(包括嵌套包含)的頭文件,如左下圖;在任意一個(gè)頭文件上右擊選擇File Properties
可以看到文件的location,這個(gè)是iar編譯器的安裝目錄。(在安裝iar時(shí)或者iar后,可以隨時(shí)選擇安裝iar支持的各個(gè)廠商的各個(gè)型號(hào)的device,否則編譯器可能無法為我們所用。)這個(gè)從這個(gè)文件的名稱可以看出它的作用,二者結(jié)合有助于我們理解編譯器和我們的工程里的文件是怎么緊密結(jié)合在一起的。
Tips:若設(shè)置工程時(shí),不勾選左下圖中的Use CMSIS選項(xiàng),則編譯會(huì)提示右下圖的錯(cuò)誤。
為什么呢?是因?yàn)閏ore_cm0.h是CMSIS的一個(gè)重要文件,但是呢?我們告訴編譯器的搜索路徑里根本沒有這個(gè)文件,所以會(huì)報(bào)錯(cuò)。解決的方法1:勾選Use CMSIS選項(xiàng),讓編譯器用iar自己安裝時(shí)一起下載的core_cmo.h文件。解決方法2:其實(shí)ST的官方資料里,已經(jīng)給出這些必要的文件。我們可以把這些文件拷貝到工程目錄下,或者工程目錄下新建的或者任意的文件夾下,然后把這目錄添加到編譯器的搜索路徑,就可以解決問題。ST官方的打包資料里的相應(yīng)文件在下圖所示的目錄里,
Tips:更多的編譯原理以及相應(yīng)設(shè)置使用文件,我也在學(xué)習(xí)中,需要繼續(xù)深入。
總結(jié)
以上是生活随笔為你收集整理的IAR forARM 建立第一个STM32F051的工程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: trello_如何构建Trello Ch
- 下一篇: 基于STM32F051K8芯片以DMA中