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