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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

stm32IAP代码升级小结

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32IAP代码升级小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 概述

最近負責項目代碼升級這一部分,在這里做一個小結。要實現程序的遠程升級,需要用到兩個程序,一個是Bootloader,另一個就是APP。單片機開機首先執行Bootloader,然后對APP進行引導。

2 流程圖

在我們的項目中兩個程序的流程圖大致如下:

開始BootLoader需要更新?app循環更新代碼?接收,寫入更新代碼yesnoyesno

說明:需要更新時,通過GPRS模塊向單片機發送代碼更新指令和數據,然后單片機依次從模塊中取出發開的代碼數據,寫入到flash中。然后寫入相關更新數據到指定flash,重啟單片機,在Bootloader中讀取相關地址數據,獲取更新程序的地址等信息,然后對程序進行跳轉。

3 功能實現

需要把單片機flash,分成4個部分,分別是Bootloader,APP1,APP2,參數區。其中參數區一般幾十個字節就夠用,用于保存是否更新標識等信息,當前demo參數區信息為:

#define FLASH_UPDATE_FLAG_ADDR FLASH_CONFIGDATA_ADDR #define FLASH_APP1_VISION_ADDR FLASH_UPDATE_FLAG_ADDR+HALFWORD #define FLASH_APP2_VISION_ADDR FLASH_APP1_VISION_ADDR+VISION_SIZE #define FLASH_APP1_LENGTH_ADDR FLASH_APP2_VISION_ADDR+VISION_SIZE #define FLASH_APP2_LENGTH_ADDR FLASH_APP1_LENGTH_ADDR+HALFWORD #define FLASH_APP1_CRC_ADDR FLASH_APP2_LENGTH_ADDR+HALFWORD #define FLASH_APP2_CRC_ADDR FLASH_APP1_CRC_ADDR+HALFWORD #define FLASH_CURRENTAPP_FLAG_ADDR FLASH_APP2_LENGTH_ADDR+HALFWORD
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.1 Bootloader主要代碼

在Bootloader中主要是開機讀取flash參數區用于更新,然后對程序進行引導,其跳轉程序為:

void iap_load_app(u32 appxaddr) {if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //判斷地址合法{ __set_CONTROL(0); //特權模式__ASM("CPSID I"); //關中斷jump2app=(iapfun)*(vu32*)(appxaddr+4); //程序開始地址為代碼區第二字 MSR_MSP(*(vu32*)appxaddr); //初始化堆棧指針jump2app(); //跳轉 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.2 APP主要代碼

在APP,和平常不同的主要是兩個方面,一個是代碼存放的地址,如果是通過JLink升級,下載的地址需要更改?
?
二是,程序開始時需要加上,這兩句代碼

SCB->VTOR = FLASH_BASE | 0x04000; //修改中斷向量表__ASM("CPSIE I"); //開中斷
  • 1
  • 2

4 其他

這里有幾個需要注意的細節?
1.在用到RTOS時,在跳轉時一般都要在跳轉前開啟特權模式以及關中端,然后在APP中一開始打開中斷。?
2.由于中斷向量的關系,跳轉程序的起始位置需要是512字節的倍數。?
3.flash的讀取和寫入一般都是半字操作的。?
4.大容量的stm32每個扇區為2k,中容量為1k,這個在寫入更新代碼時需要注意。

總結

以上是生活随笔為你收集整理的stm32IAP代码升级小结的全部內容,希望文章能夠幫你解決所遇到的問題。

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