花了四天時(shí)間才把IAP功能做好。其中也遇到許多的坑,這次把這次IAP功能實(shí)現(xiàn)過程遇到的坑把它分享出來。 一開始做iap的時(shí)候也是先從網(wǎng)上看別人的實(shí)現(xiàn)方法,其中就下載了一套別人的程序,不過主控芯片是STM32F103zv,就是不是我想要的那個(gè)型號(hào),還有他的邏輯跟我的有點(diǎn)不一樣。所以才走了那么多天的坑。 1、先移植別人的flash燒寫代碼跟運(yùn)行APP應(yīng)用程序的代碼,基本各個(gè)版本大同小異。 2、然后實(shí)現(xiàn)自己的UART,實(shí)現(xiàn)串口接收程序(因?yàn)橐ㄟ^串口接收APP應(yīng)用固件) 3、然后接收到的固件燒寫進(jìn)flash 4、最后就是運(yùn)行到APP應(yīng)用程序了。 基本實(shí)現(xiàn)iap也是這幾個(gè)步驟,但是就是不成功一開始。 然后就開始查找問題: 1、查看接收的固件對(duì)不對(duì) 2、通過keil編譯器里的仿真可以看到flash的具體數(shù)值,判斷memory里的數(shù)據(jù)是不是跟串口接收的數(shù)據(jù)一樣的。 查找了之后自己感覺是對(duì)的(其實(shí)沒有仔細(xì)驗(yàn)證),然后就開始跑到APP應(yīng)用程序,每一次運(yùn)行到APP程序時(shí)就進(jìn)入了硬件錯(cuò)誤中斷HardFault_Handler();就是這個(gè)問題我查找了兩天得不到解決。 最后實(shí)在沒辦法了才有查找接收的問題,發(fā)現(xiàn)接收處理是有問題的,因?yàn)樾酒?/font>SRAM是有限的,接收數(shù)組不可能開的太大,我的方法是開兩個(gè)數(shù)組輪流接收固件,一個(gè)數(shù)組接收滿了之后就先寫進(jìn)flash,另一個(gè)數(shù)組繼續(xù)接收。因?yàn)楣碳沂峭ㄟ^串口助手發(fā)送給芯片的,所以串口助手一次性發(fā)完一個(gè)固件不間斷。后面改了這個(gè)接收的問題,然后再去檢查接收到的固件寫進(jìn)FLASH時(shí)是否是對(duì)的,這兩部做好之后基本不會(huì)有什么大問題。 1、另一個(gè)需要注意的就是地址的偏移,Bootloader地址跟APP應(yīng)用地址分開來。 2、進(jìn)入APP應(yīng)用程序之前需要清除中斷,把一些GPIO,ADC之類的都關(guān)閉。 3、APP應(yīng)用端要配置好中斷偏移向量。 基本以上步驟檢查好了,iap應(yīng)用是沒有問題的。
全部資料51hei下載地址:
在線應(yīng)用升級(jí).7z
(360.75 KB, 下載次數(shù): 356)
2019-8-18 15:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|