日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32 IAP + APP ==双剑合一

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32 IAP + APP ==双剑合一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(擴展-IAP主要用于產品出廠后應用程序的更新作用,上一篇博文詳細的對IAP 升級程序做了詳細的分析http://blog.csdn.net/yx_l128125/article/details/12992773,考慮到出廠時要先燒寫IAP ?再燒寫APP應用程序要燒寫2次增加工人勞動力基礎上寫了“STM32 IAP+APP ==>雙劍合一”鏈接稍后發,希望通過IAP程序的hex 文件 和 APP的hex文件 合成一個hex ?或者把合成的hex文件轉成.bin 文件 減少“體力”)


一、簡單框架介紹

(簡單回顧上篇博文《IAP在線 升級詳解》http://blog.csdn.net/yx_l128125/article/details/12992773的幾個重要知識點:

1、stm32內部flash起始地址:0x0800 0000 -- 0x0802 0000 ,其中 從 0x0800 0000開始位置存放IAP 升級程序, ?從0x 0800 3000開始的位置存放APP應用程序[ 而APP中的中斷向量表放在0x0800 3000地方,更重要的是中斷向量表的第1項存放的是棧頂地址,第二項放的是”復位中斷“ ]

??

二、IAP +APP 結合的方法

?IAP 和APP 的hex 文件合成1個hex 文件的方法有2種:

(1) ?"簡單1+1" ? ?

(2) IAP 先燒寫進flash 的 0x0800 0000 開始位置, ?APP燒寫到 flash ?的0x 0800 3000開始的地方; 之后通過我上一篇博文的 IAP程序的文件讀出功能讀取flash 上的數據讀到一個.bin文件上;


我們先來詳細分析“方法一”的操作:

1.我們設置編譯IAP程序的編譯器(如圖),這個設置意思是把IAP程序下載到flash 的?0x0800 0000開頭的位置,然后編譯程序


2.編譯完程序后,在工程目錄的output文件夾中找到編譯后生產的.hex文件;

用 notepad++ ?或者 UltraEdit 打開 ?IAP 的.hex文件 ? 和APP 的.hex 文件 , ?(順便問一下.hex文件格式你會看嗎?)

hex文件格式:

(1)以行為單位,每行以冒號開頭,內容全部為16進制碼(以ASCII碼形式顯示)

?

(2)在HEX文件里面,每一行代表一個記錄。記錄的基本格式為:

?

冒號本行數據長度本行數據起始地址數據類型數據校驗碼
?1 byte2 bytes1 byten byte1 byte
??????
??????

?

?

第一個字節?表示本行數據的長度;

第二、三字節表示本行數據的起始地址;

第四字節表示數據類型,數據類型有:0x000x01、0x02、0x03、0x040x05

'00' Data Rrecord:用來記錄數據,HEX文件的大部分記錄都是數據記錄

'01' End of File Record:用來標識文件結束,放在文件的最后,標識HEX文件的結尾

'02' Extended Segment Address Record:用來標識擴展段地址的記錄

'03' Start Segment Address Record:開始段地址記錄

'04' Extended Linear Address Record:用來標識擴展線性地址的記錄

'05' Start Linear Address Record:開始線性地址記錄

然后是數據,最后一個字節?為校驗和。

校驗和的算法為:計算校驗和前所有16進制碼的累加和(不計進位),檢驗和?= 0x100 -?累加和

打開.hex內容如下:(中間部分數據略去)

?

:020000040800F2 :10000000B80B00207D250008850300088703000841 :100010009B0300089F030008A303000800000000E2 :10002000000000000000000000000000A70300081E :10003000A903000800000000AB030008AD0300089E 。 。 。 :102B40000400000000000000000000000000000081 :102B50000000000000000000000000000000000075 :102B6000010203040102030406070809020406081F :102B700000366E01000000000000000001020304A6 :042B80000607080933 :0400000508000121CD :00000001FF


先分析第一條語句---- “:02 0000 ?04 0800 ?F2”

?

?

冒號本行數據長度本行數據起始地址(偏移地址)數據類型數據校驗碼
?1 byte2 bytes1 byten byte1 byte
? ???
020000040800F2

在上面的數據類型后2種記錄(0405)都是用來提供地址信息的。每次碰到這2個記錄的時候,都可以根據記錄計算出一個地址。對于后面的數據記錄,計算地址的時候,都是以這些地址為基礎的。以我們的語句為例:

?

1條記錄的長度為02LOAD OFFSET0000RECTYPE04,說明該記錄為擴展段地址記錄。數據為0008,校驗和為F2。從這個記錄的長度和數據,我們可以計算出一個基地址,這個地址為(0x0800 << 16) = 0x0800 0000?,后面的數據記錄都以這個地址為基地址。

第二條語句----“ :10000000B80B00207D250008850300088703000841”

?

冒號本行數據長度本行數據起始地址(偏移地址)數據類型數據校驗碼
?1 byte2 bytes1 byten byte1 byte
????
:10000000B80B00207D250008850300088703000841

2 條記錄的長度為 10(0x10=16字節) LOAD OFFSET 0000 RECTYPE 00('00' Data Rrecord:用來記錄數據,HEX文件的大部分記錄都是數據記錄 ,數據為B80B00207D2500088503000887030008 ? 校驗碼為41;此時基地址為:0x0800 0000 ?加上偏移地址:0x0000 ? 這條記錄的16個字節的數據的起始地址為:0x0800000 + 0x0000 =0x0800 0000

?

第3條語句----“:0400000508000121CD”

?

冒號本行數據長度本行數據起始地址(偏移地址)數據類型數據校驗碼
?1 byte2 bytes1 byten byte1 byte
????
:0400000508000121CD

記錄的長度為 04 LOAD OFFSET 0000 RECTYPE 05 ,此時,EIP寄存器里存放的地址:0x0800 0121; 即IP指向下一個要執行的指令所在地址,我們來看一下IAP工程list目錄下的.map文件,其中第393行處如圖:(看到沒?0x0800 0121值main函數的入口地址)

?

EIP是32位機的指令寄存器,?IP是指令寄存器,存放當前指令的下一條指令的地址。CPU該執行哪條指令就是通過IP來指示的

上圖參考hex數據文檔:http://pages.interlog.com/~speff/usefulinfo/Hexfrmt.pdf?或?http://microsym.com/editor/assets/intelhex.pdf

?

第4條語句---“:00000001FF” ?(每一個.hex文件的最后一行都是固定為這個內容)

?

冒號本行數據長度本行數據起始地址(偏移地址)數據類型數據校驗碼
?1 byte2 bytes1 byten byte1 byte
?????
:00000001?FF

?(每一個.hex文件的最后一行都是固定為這個內容)
記錄的長度為 00 LOAD OFFSET 0000 RECTYPE 01 ? 01' End of File Record:用來標識文件結束,放在文件的最后,標識HEX文件的結尾)

?

三、iap 和app ?的.hex 文件結合

操作1:設置編譯IAP程序的編譯器(如圖),這個設置意思是把IAP程序下載到flash 的?0x0800 0000開頭的位置,然后編譯程序,生產.hex文件;


操作2:設置編譯APP程序的編譯器(如圖),這個設置意思是把APP程序下載到flash 的?0x0800 3000開頭的位置,然后編譯程序,生產.hex文件;



操作3:用 notepad++ ?或者 UltraEdit 打開 ?IAP 的.hex文件 ? 和APP 的.hex 文件

把IAP的.hex 最后一句結束語句去掉(即:刪除:00000001FF)

把APP的.hex 全部內容拷貝復制到 剛才刪掉結束語句的 IAP的.hex后面(如圖)

原來第701行為?:00000001FF 的結束語句


操作4:把兩個.hex合成的.hex文件重新命名,燒寫到0x0800 0000 開始位置的地址即可;

這里把 合成的.hex文件上傳到我的資源:http://download.csdn.net/detail/yx_l128125/6475171(必須把PB1管腳拉低,串口1連接超級終端才能看到升級程序的引導信息):


?

轉載于:https://www.cnblogs.com/suncoolcat/p/3397909.html

總結

以上是生活随笔為你收集整理的stm32 IAP + APP ==双剑合一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。