關注+星標公眾號,不錯過精彩內容
作者 |?Lucas
編排 |?strongerHuang
本文由作者『Lucas』原創(chuàng)并授權發(fā)布,地址:
https://blog.csdn.net/lin_duo/article/details/110754189
下載算法對于大部分工程師來說,只需要會使用即可,也不用過多去關心里面實現(xiàn)的方法。當然,對于有時間的工程師來說,了解下載算法還是有一定好處的。
之前給大家分享過基于Keil MDK環(huán)境的下載算法制作,今天就來給大家分享一篇基于IAR、STM32的下載算法的制作。
IDE環(huán)境:IAR EWARM 8.32
我們?yōu)槭裁葱枰螺d算法?下載算法是在哪里使用的?
如上圖所示,我們想通過C-SPY將固件直接下載到Flash是不被允許的,那我們怎么才能實現(xiàn)將固件下載進Flash呢?
IAR官方文檔《FlashLoaderGuide.ENU.pdf》告訴我們說,我們需要先將固件放在RAM緩存里面,然后通過一個名叫"Flash Loader"的小程序,將代碼不斷的從RAM搬運到Flash(這里的Flash可以是內部Flash,也是可以是外部Flash)。
上文中提到的"Flash Loader"就是需要我們針對不同的硬件去分別實現(xiàn)的代碼,也就是所謂的Flash下載算法。
IAR下載算法一共包括4個文件(.out文件、.flash文件、.board文件、.mac文件)。
1、.out文件是由"Flash Loader"代碼生成的,里面包含了我們對QPSI管腳的定義,函數(shù)FlashInit()、函數(shù)FlashWrite()、函數(shù)FlashErase()的實現(xiàn)。
2、.flash文件是一個XML文件,里面包含了一些必要的元素和一些不必要的元素,僅針對必要元素做一個簡單介紹
3、
.board文件同樣也是一個XML文件??梢杂?pass> *** 進行多個.flash文件設置。每個pass內包含了兩個必要的屬性
4、IAR每次仿真下載完程序是從當前工程的main函數(shù)開始運行的。如果我們將代碼下載到了0x90000000地址處,我們并沒有開啟內存映射,是不可以仿真的。這時候就需要采樣.mac文件作為一個啟動腳本,當程序仿真下載完成后,跳轉到0x08000000處開始運行。在0x08000000處進行內存映射,然后馬上跳轉到0x90000000處,就可以進行仿真了。
上面已經(jīng)介紹了下載算法制作的一些基礎知識及制作思想,下面我們正式開始動手制作下載算法。
https://files.iar.com/public/cmsis/
“flash_loader.c”、“flash_loader.h”、“flash_loader_asm.s”、"flash_loader_extra.h"四個文件是供C-SPY調用的,我們不應該去修改文件內容。真正需要我們去修改的內容是"template"文件夾下的"flash_loader_ram.c"文件。
2、
為了方便,我找到IAR安裝路徑(“C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\arm\src\flashloader\ST”)下的"FlashSTM32H7xx_QSPI"文件夾,對這個文件內容進行更改。我們將"FlashLoder"代碼添加進去,并添加相應的路徑。
(注:“flash_loader_ram.c"文件當前工程下被改名為"FlashSTM32H7xx_QSPI.c”)。
A.我們需要將代碼下載到RAM里面執(zhí)行,IAR->Option->Linker->Config配置如下:
B.IAR->Option->Linker->Output配置的是輸出.out文件的內容:
C.當前工程沒有main函數(shù),程序運行的第一個函數(shù)將是FlashInit函數(shù),對IAR->Option->Linker->Library配置如下:
7、對于H750內存映射外部Flash還需要制作.mac文件,內容如下:
文件內容就很好理解了,下載完成后,pc指針指向中斷向量表的Reset_Handler函數(shù),堆棧指針指向程序運行的首地址。這樣每次程序仿真下載完成后,就從0x08000000處開始運行。我們可以把Boot程序放在這個地址,Boot程序里面進行內存映射,然后跳轉到0x90000000處。
我們制作好上訴四個文件過后,創(chuàng)建一個工程(該工程要運行在0x90000000處),對這個工程進行簡單配置。
IAR->Option->Debugger->Download下,配置如下:
IAR->Option->Debugger->Setup下,配置如下:
IAR->Option->Linker->Edit下,配置如下:
在代碼初始的地址,還需要加上中斷向量表地址SCB->VTOR = 0x90000000;
做完上訴配置后,我們進行仿真下載,如下圖所示,我們可以看到main函數(shù)已經(jīng)存在與0x90003588處,并且可以進行仿真,說明我們配置是正確的。
將代碼全速運行,可以看見串口顯示正式我們程序設置的輸出。
至此,關于IAR下下載算法的制作與驗證就全部介紹完了。
參考資料:
EWARM_DebuggingGuide.ENU.pdf
------------?END?------------
關注
微信公眾號『嵌入式專欄』,底部菜單查看更多內容,回復“加群”按規(guī)則加入技術交流群。
點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。
免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!