IAR新建stm32工程,完美移植stm32标准库(附源码)
- 開發(fā)環(huán)境:Window 10?64bit
- 開發(fā)工具:IAR Embedded Workbench
- 硬件:stm32f103c8t6
?
基于IAR 開發(fā)工具,新建立STM32F1系列的最小開發(fā)例程,并加入stm32的官方標(biāo)準(zhǔn)庫,工程源碼STM32-IAR-Demo。下面是詳細(xì)步驟說明:
1.下載STM32官方標(biāo)準(zhǔn)庫
點(diǎn)擊上面鏈接,下載需要登陸賬號(hào),如果沒有就注冊(cè)一個(gè),非常快就能注冊(cè)完成。我用的是F1系列,如果你用的不是F1系列,那么打開鏈接后找到對(duì)應(yīng)的標(biāo)準(zhǔn)庫下載。我下載解壓完是這樣子的(版本V3.5.0):
?
上面的Project里面就有IAR的例子工程,也有其他編譯器的例子工程,以及外設(shè)的使用例子。一般我們只需要選擇熟悉一種開發(fā)工具即可,不會(huì)用到所有的例子,同時(shí)如果我們沒有買官方的開發(fā)板,它的摸板例子也不能直接使用。我們只需要將關(guān)鍵的庫文件復(fù)制到我們新的項(xiàng)目目錄里,對(duì)應(yīng)自己買的開發(fā)板資源進(jìn)行開發(fā)。?
2.新建IAR工程目錄
?????? 在自己電腦上新建一個(gè)STM32-IAR-Demo的文件夾,在該文件夾里面創(chuàng)建以下文件夾:
,
?????? Config:保存IAR工程需要的配置文件;Libraries:保存stm32標(biāo)準(zhǔn)庫文件,以及一些內(nèi)核文件,一般情況不需要更改的文件;Project:保存IAR工程文件,以及IAR編譯過程產(chǎn)生的文件。User:保存自己寫的代碼,里面可以跟據(jù)自己的喜好再進(jìn)行文件夾分類,我加了一個(gè)main.c文件進(jìn)去。
?????? 以上文件夾分類可根據(jù)自己的喜好進(jìn)行調(diào)整。
3.將‘步驟1’下載的標(biāo)準(zhǔn)庫文件復(fù)制到‘步驟2’新建的目錄里
1.將stm32標(biāo)準(zhǔn)庫en.stsw-stm32054\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\EWARM 文件夾里的.icf文件全部復(fù)制到STM32-IAR-Demo下的Config文件夾里:
?????? 2.將stm32標(biāo)準(zhǔn)庫en.stsw-stm32054\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries里的文件復(fù)制到STM32-IAR-Demo下的Libraries文件夾里:
CMSIS里面還可把多余的文件去掉,我這里沒有再進(jìn)一步處理。CMSIS\CM3\CoreSupport里面是M3核通用的文件,需要用到。CMSIS\CM3\DeviceSupport\ST\STM32F10x里面的.H和.C文件都用到,其中:stm32f10x.h里定義了芯片所有寄存器的基地址,以及配置寄存器的結(jié)構(gòu)體的定義;兩個(gè)system_stm32f10x文件時(shí)系統(tǒng)默認(rèn)時(shí)鐘的配置,它里面的SystemInit函數(shù)會(huì)在芯片啟動(dòng)時(shí)調(diào)用(啟動(dòng)文件.s里),所以我們?cè)趍ain函數(shù)里不進(jìn)行時(shí)鐘配置也可以正常工作。
CMSIS\CM3\DeviceSupport\ST\STM32F10x里面還有一個(gè)startup文件夾,我們只需要它底下iar文件夾里面的文件,打開iar文件夾會(huì)發(fā)現(xiàn)很多個(gè).s文件,我們使用時(shí)需要對(duì)應(yīng)自己芯片的容量選擇一個(gè)就行。
?????? 3.將stm32標(biāo)準(zhǔn)庫en.stsw-stm32054\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template里的其中3個(gè)文件(下圖所示)復(fù)制到STM32-IAR-Demo下的User文件夾里:
這里并沒有復(fù)制main文件,我們?cè)谛鹿こ汤镄陆ㄒ粋€(gè)空的main.c文件即可,也是放在User文件夾底下。stm32f10x_conf.h文件的作用是包含哪些用到的外設(shè)的頭文件,假如沒有用到adc模塊,那就注釋掉#include "stm32f10x_adc.h"這一句話,以節(jié)約編譯出來的程序所占的空間。stm32f10x_it.h文件的作用是中斷函數(shù)的定義,如果用到外設(shè)的中斷,可以統(tǒng)一在這個(gè)文件夾里寫,中斷函數(shù)的名字不是隨便起的,需要參考.s啟動(dòng)文件。
?????? 4.到此,建立stm32的IAR工程的前期工作已準(zhǔn)備完成。
?
?
4.打開IAR軟件,新建IAR工程
1. 打開IAR->File->New Workspace建立好工作空間,保存工作空間File->Save Workspase As,選擇剛才新建的STM32-IAR-Demo目錄下的Project文件夾里,保存名字STM32-IAR-Demo;接著Project->Create New Project,選擇Empty project空的工程,點(diǎn)確認(rèn),選擇保存路徑是剛才新建的STM32-IAR-Demo目錄下的Project文件夾里,保存名字也是STM32-IAR-Demo。新建好了之后的Project文件夾:
?????? 2.將新建STM32-IAR-Demo目錄里的源文件添加到IAR工程里面,右擊界面左邊的工作空間,先添加組,我這加了Libraries、Startup、User三個(gè)組:
接著鼠標(biāo)在組上右擊添加文件:
Libraries——我在Libraries組下又新建了兩個(gè)組CMSIS、STM32F10……_Driver,在STM32-IAR-Demo/Libraries里找到下圖所示的文件分別加入到這兩個(gè)組,圖片里組STM32F10……_Driver沒有展開,里面添加的是STM32-IAR-Demo\Libraries\STM32F10x_StdPeriph_Driver\src下所有的.c文件。
Startup——在STM32-IAR-Demo\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar下找到適合自己芯片容量的.s文件,
User——添加STM32-IAR-Demo\User里的stm32f10x_it.c文件。
到此,所有.c文件添加完畢。如果某些.c文件沒有用到,也可以添加到工程里面,然后再該文件上右擊->Options->Exclude from build打勾,那么它就不會(huì)參加編譯。
?????? 3.配置工程,打開Project->Options,General Options->Target->Device選擇使用的芯片型號(hào),General Options->Library Configuration勾上Use CMSIS:
接著,C/C++Compiler->Preprocessor,一處是配置頭文件目錄(為了在include時(shí)不用加上路徑),另一處是定義全局宏,如下圖配置:
(下面提供文本方便復(fù)制)
$PROJ_DIR$\..\
$PROJ_DIR$\..\Libraries\STM32F10x_StdPeriph_Driver\inc
$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
$PROJ_DIR$\..\User
?
USE_STDPERIPH_DRIVER
STM32F10X_MD
再來,配置icf文件:
最后,配置Debugger,選擇自己使用的調(diào)試器(如下圖),再Download里把Verify download勾上(圖略):
完成上面配置,記得點(diǎn)擊OK保存。
4.添加一個(gè)main.c文件,保存到STM32-IAR-Demo/User目錄下,并加入到工程:
點(diǎn)擊make,進(jìn)行編譯,可能會(huì)出現(xiàn)3個(gè)警告,把core_cm3.c排除編譯,鼠標(biāo)右擊該文件,Options->Exclude form build勾上,前面已經(jīng)在工程配置里Use CMSIS,無需該文件也可。重新編譯就沒有錯(cuò)誤和警告了。
5.利用移植好stm32標(biāo)準(zhǔn)庫的工程實(shí)現(xiàn)一個(gè)LED例程:
#include "stm32f10x.h"static void LED_GPIO_Init(void); static void delay(int n);int main(void) {LED_GPIO_Init();while(1){GPIO_SetBits(GPIOC,GPIO_Pin_13);delay(100);GPIO_ResetBits(GPIOC,GPIO_Pin_13);delay(100);}}static void LED_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_Pin?? = GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode? = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStruct); }static void delay(int n) {int i;while(n--){for(i = 0;i<0xFFFF;i++);} }點(diǎn)擊下載調(diào)試,點(diǎn)擊運(yùn)行,led閃爍,證明工程沒有問題。
接下來可以在User目錄下添加自己的代碼,繼續(xù)擴(kuò)展工程。
補(bǔ)充1:官方例程里的.s文件,在IAR編譯器編譯時(shí)會(huì)出現(xiàn)以下警告:
修改方法時(shí),雙擊一個(gè)警告跳轉(zhuǎn)到代碼后,比如:
SECTION .text:CODE:REORDER(1)? >>>改為>>> SECTION .text:CODE:NOROOT:REORDER(1)
NOROOT表示如果符號(hào)沒有被關(guān)聯(lián)的時(shí)候是被優(yōu)專化掉的, 如果想不被優(yōu)化則使屬用ROOT。
更正:icf的路徑我設(shè)置了絕對(duì)路徑,如果工程復(fù)制到別的地方,編譯會(huì)報(bào)錯(cuò)。如下圖更改為相對(duì)路徑:
$PROJ_DIR$\..\Config\stm32f10x_flash.icf
如若有誤,還望指出,謝謝。
?
總結(jié)
以上是生活随笔為你收集整理的IAR新建stm32工程,完美移植stm32标准库(附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt 实现串口终端控制台,适配RT-Th
- 下一篇: stm32系列启动文件解读(KEIL编译