前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图文详解STM32单片机远程升级

图文详解STM32单片机远程升级

作者头像
李肖遥
发布2022-12-22 10:46:01
5710
发布2022-12-22 10:46:01
举报

素材来源:https://blog.csdn.net/fang_yang_wa/article/details/123780284

整理:技术让梦想更伟大 | 李肖遥

1、需要两份程序

BootLoader和App程序,两份程序均可以通过jlink下载,只需要将下载地址修改一下即可:

2、在BootLoader中的跳转函数

代码语言:javascript
复制
#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个程序:

  1. BootLoader程序,起始地址:0x08000000
  2. APP1程序,起始地址:0x08008000
  3. APP2程序,起始地址:0x08013000

这种情况就需要BootLoader程序自动选择往哪个地址跳转,这个地址再升级完以后会变,比如当前的跳转地址是app1,那么升级后跳转的地址就变为app1。

针对这种场景,做如下修改:

5、keil编译器中设置的程序起始地址会别写进bin文件

上图中的地址会被写入到bin文件中,所有在编译APP1程序和APP2程序的时候,要记着修改这里的起始地址。

版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术让梦想更伟大 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、需要两份程序
  • 2、在BootLoader中的跳转函数
  • 3、在app中修改中断向量表的偏移地址
  • 4、程序自动选择向量表的偏移地址
  • 5、keil编译器中设置的程序起始地址会别写进bin文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档