谷动谷力

 找回密码
 立即注册
查看: 1654|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2022-11-22 15:16:45 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
图文详解STM32单片机远程升级
1、需要两份程序
BootLoader和App程序,两份程序均可以通过jlink下载,只需要将下载地址修改一下即可:
2、在BootLoader中的跳转函数#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,那么升级后跳转的地址就变为app1。
针对这种场景,做如下修改:
5、keil编译器中设置的程序起始地址会别写进bin文件
上图中的地址会被写入到bin文件中,所有在编译APP1程序和APP2程序的时候,要记着修改这里的起始地址。


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-12-29 23:13 , Processed in 0.099612 second(s), 45 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表