最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

把STM32F407的keil版程序移植到IAR for ARM上

2020-04-04 14:44 作者:江湖夜雨飄零客  | 我要投稿
  • 使用開發(fā)板:正點原子的STM32F407ZGTb——探索者

  • 使用IAR版本,IAR Embedded Workbench for ARM 7.80.4.12495,如下圖所示

IAR版本信息
  • 使用ST-Link進行在線下載程序和調試

  • 使用正點原子提供的源代碼移植到IAR上,有人說,為啥要移植到IAR上呢,也沒啥,總有需要嘛。如下圖所示為所有的庫函數源代碼

正點原子庫函數源代碼
  • 整個移植過程與思路,使用上面提到的 正點原子 提供的工程文件,直接在工程里面新建IAR工程,然后讓整個工程實現支持IAR和Keil。

  • IAR軟件安裝——————略,請去官方下載,自行安裝。

正文開始,以源代碼:實驗0 Template工程模板為基礎來實現移植

新建IAR工程,打開IAR→project→Create New Project...

我們選擇建立一個空工程

在工程文件夾下新建一個IAR文件夾

把工程保存到這個文件夾下

接下來就是整個工程的搭建,在新建的工程上右鍵 →Add →Add Group...,熟悉IAR的都知道怎么做了,可以跳過

我們建立下圖所示的分組,里面是用來添加源程序文件的,分組以方便后期管理,熟悉IAR的都知道怎么做了,可以跳過

保存所有,保存工作空間,這樣新的空工程就建好了

我還建立了一個說明的組,用來放說明文件

接下來就是把各個分組的文件導入

首先是有一個要處理的是STM32啟動文件,如果沒有這個文件,程序也可以編譯通過,也可以運行,但是中斷函數是進不去的,而keil使用的是在工程目錄下的CORE文件夾下的:startup_stm32f40_41xxx.s 文件,如下圖所示,但是這個文件我暫時還無法讓它適用于IAR,所以我們要去找適合IAR的啟動文件

打開安裝IAR for ARM的路徑,

...\IAR Systems\Embedded Workbench 7.5\arm\RTOS\SEGGER\ST\STM32F407\embOS_STM32F4_Discovery\DeviceSupport

選擇startup_stm32f40x.s,這是使適用于IAR的STM32啟動文件

復制一份到在工程文件夾下建立的IAR文件夾中

然后,把它添加進IAR分組中,詳細操作如下圖,跟添加分組有點類似,熟悉IAR的也都知道怎么做了,可以跳過

在IAR分組上 右鍵 →Add →Add Files...

選擇剛才復制的startup_stm32f40x.s文件,雙擊添加

我們發(fā)現CORE文件夾里面就只有唯一一個需要添加的文件——startup_stm32f40_41xxx.s?,結果我們還不用它了,所以建立的CORE分組好像就沒什么用了,也可以把它移除,【吐血】

之后就是把工程文件夾中的每一個文件夾中的.c源文件添加到對應分組中,跟上面添加startup_stm32f40x.s文件相同,理解的 同孩 可以跳過自己操作了

如下圖,以添加delay.c文件到SYSTEM分組中為例演示,

在SYSTEM分組上 右鍵 →Add →Add Files...

選擇相應文件夾下的delay.c文件就OK了,如果該目錄下需要添加的文件多的話,是可以批量添加的,支持鼠標區(qū)域選擇、Ctrl + A全選? 、Ctrl + 鼠標多選? 、Shift + 鼠標區(qū)域選擇?等window差用的功能與快捷鍵,移除時亦可以~,keil好像移除的只能一個文件一個文件的移除

然后我還在IAR文件夾里新建了一個? 說明 文件夾并在里面新建了一個說明.txt的文件,用來解釋說明這個工程文件的功能,用途等等,并把工程文件下的README文件夾中的說明文件?README.txt添加了進來,

至此,所有源文件都添加進來了,如下圖,是與keil的對比,主要區(qū)別是兩個的啟動文件的不同,FWLIB中是外設的庫,一般是使用哪個外設添加相應的外設庫,也可以全部添加,我只添加了幾個作為示例

接下來是一些設置,添加完之后如果直接編譯,肯定是一大堆一大堆的錯誤,

在工程上右鍵 →Options...打開工程設置

選擇General?Options →Target?→Device?→ST ...直到選擇自己使用的單片機型號,例如我的ST STM32F407ZG ,選擇好了之后不要急著點 OK,

一般我們都要支持printf串口輸出,再次選擇Library Configuration →Library 選擇Full就可以為后面支持printf串口輸出做好準備了,之后也不要急著點 OK,

選擇C/C++Compiler?點擊右邊的小箭頭 →找到 Preprocessor?

→在Defined symbols:(one per line)里面輸入兩個宏定義:

USE_STDPERIPH_DRIVER

STM32F40_41xxx

在Additional include directories:(one per line)里面輸入地址

$PROJ_DIR$

$PROJ_DIR$\.

$PROJ_DIR$\..\CORE

$PROJ_DIR$\..\FWLIB\inc

$PROJ_DIR$\..\FWLIB\src

$PROJ_DIR$\..\SYSTEM\delay

$PROJ_DIR$\..\SYSTEM\sys

$PROJ_DIR$\..\SYSTEM\usart

$PROJ_DIR$\..\USER

這是所有工程文件包含的文件夾,里面有頭文件需要IAR去這里面找

也可以手動一個文件夾一個文件夾添加,點擊右邊的 ... ,可以看到已經添加的地址(相對地址)

點擊 Click to add添加新的地址 ,

例如,我把README文件夾添加進來,雙擊該文件夾,演示作用,其實沒什么用,

進入之后,點擊Select

可以看到,剛選擇之后默認問絕對地址,這樣與對于移植程序或移動不友好,改為相對地址

點擊右側的向下的三角▽,選擇$PROJ_DIR$\..\README ,就OK了

因為是演示,沒用,所以我們在把它去掉,【我太南了】,點擊要去掉的地址,點擊前面的紅色×就可以了

這樣設置就好了,但是,也不要急著點 OK,【吐血】,我們順便把ST-Link也一并設置好,

選擇Debugger →Setup →Driver →選擇ST-LINK

選擇ST-LINK,可以設置連接方式、速度等

OK,終于完成了,可以點OK了

你以為完成了嗎,如果你添加了usart.c的話,你編譯還是會出錯,【再次吐血】

相信我,只差億點點,只剩?億 步,就能完成了

打開usart.c,編譯的 warnings:1? ?errors: 1?

可以看到他寫的是....

警告無法識別

錯誤,已經定義聲明,那就是重復定義

既然有錯,那就把錯誤的去掉好了,【嘿嘿嘿】

于是,?warnings:0? ?errors: 0?

我們遇到什么錯誤,都不要害怕,消除錯誤的最好辦法就是把錯誤的部分去掉,只要去掉就不會出錯? [狗頭]?[狗頭]?[狗頭]?[狗頭]

我們跳轉定義,發(fā)現在stdio.h中已經有定義,那keil為什么..,好了這個問題留給有時間和精力童孩探索了,【我才不會說我去試了一下就沒深入了解了】

在線調試,使用printf,串口可以輸出

總算移植成功了。

多難興邦

天佑中華

愿逝者安息

頌英雄不朽

前輩們

這盛世如您所愿

將來

就放心的交給我們吧

2020年4月4日14:22:43

PS:2020年4月7日補充說明:

當時有億點點遺漏,真的只是億點點T^T,如下,

這個函數:void _sys_exit(int x)? ????原來不是長這樣的,本來是長這樣的:_sys_exit(int x)當時編譯的時候出錯了,我下意識的以為是自己不小心把 函數前面的 void 給刪掉了,結果是人家本來就沒帶,所以有的小伙伴如果沒注意,在編譯的時候可能還是會出錯的。

這里還要說一下,在keil里面沒加這個?void? ?雖然在Build Output里面:warnings:0? ?errors: 0

但是也有警告在這個函數前面還是有提醒警告,如下圖所示

而加上??void? 之后,就沒有警告了,說明這還是正點原子寫這個的時候沒有特別注意這一個,雖然對結果沒影響。

好了,本次修訂結束,如果有新的小伙伴發(fā)現還有哪里有問題的話,歡迎提出,大家相互學習和探討





把STM32F407的keil版程序移植到IAR for ARM上的評論 (共 條)

分享到微博請遵守國家法律
哈尔滨市| 景谷| 耒阳市| 阜康市| 灵璧县| 凤山县| 山丹县| 宣武区| 山西省| 桦甸市| 东至县| 泉州市| 连城县| 明溪县| 万安县| 万年县| 宁陵县| 布尔津县| 张家港市| 绍兴市| 封丘县| 崇义县| 江都市| 密山市| 大丰市| 石楼县| 中卫市| 龙州县| 金乡县| 修水县| 鹿邑县| 南汇区| 开化县| 平顺县| 噶尔县| 彭泽县| 霍山县| 虎林市| 尼勒克县| 措美县| 云和县|