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