圖文詳解STM32單片機遠程升級
素材來源:https://blog.csdn.net/fang_yang_wa/article/details/123780284
整理:技術讓夢想更偉大 | 李肖遙
1、需要兩份程序
BootLoader和App程序,兩份程序均可以通過jlink下載,只需要將下載地址修改一下即可:


2、在BootLoader中的跳轉函數(shù)
#define APP_FLASH_ADDR 0x8008000
iap_load_app(APP_FLASH_ADDR);
//#include "include.h"
#include "iap.h"
#include "main.h"
typedef void (*iapfun)(void);//?¨ò?ò???oˉêyààDíμ?2?êy.
iapfun jump2app;
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}
/******************************************************************************
* Function name £o iap_load_app
* Function describe £o ì?×aμ?app3ìDò?£
* Input £o appxaddr£oapp3ìDòμ?μ??·?£
* Output £o No
* Illustration £o
* Revise £o
* Existing problems : No
*****************************************************************************/
void iap_load_app(u32 appxaddr)
{
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)
{
jump2app=(iapfun)*(vu32*)(appxaddr+4);
MSR_MSP(*(vu32*)appxaddr);
jump2app(); //ì?×aμ?APP.
}
}
3、在app中修改中斷向量表的偏移地址


4、程序自動選擇向量表的偏移地址
適用場景,一顆芯片里面有3個程序:
BootLoader程序,起始地址:0x08000000 APP1程序,起始地址:0x08008000 APP2程序,起始地址:0x08013000
這種情況就需要BootLoader程序自動選擇往哪個地址跳轉,這個地址再升級完以后會變,比如當前的跳轉地址是app1,那么升級后跳轉的地址就變?yōu)閍pp1。
針對這種場景,做如下修改:

5、keil編譯器中設置的程序起始地址會別寫進bin文件

上圖中的地址會被寫入到bin文件中,所有在編譯APP1程序和APP2程序的時候,要記著修改這里的起始地址。
版權聲明:本文來源網(wǎng)絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯(lián)系我進行刪除。
???????????????? END ???????????????
關注我的微信公眾號,回復“加群”按規(guī)則加入技術交流群。
點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。
評論
圖片
表情
