热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

关注、星标公众号,直达精彩内容素材来源:https:blog.csdn.netfang_yang_waarticledetails123780284整理

    关注、星标公众号,直达精彩内容

e8a8e576e203b9fef16656d8cadfa664.png

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

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

1、需要两份程序

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

8920f5c89736924096d85a73d280978f.png4ae82d2ba8471e7abf616019d0f18607.png

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 valueBX 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中修改中断向量表的偏移地址

c39a7c64a11f44626a141cf974f33434.png

53901fd3815c831590eaa604417ad398.png6aba3f60f059adea6e069901d0862aa9.png

4、程序自动选择向量表的偏移地址

适用场景,一颗芯片里面有3个程序:

  1. BootLoader程序,起始地址:0x08000000

  2. APP1程序,起始地址:0x08008000

  3. APP2程序,起始地址:0x08013000

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

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

fa686aa129877963869efbeadada0e4b.png

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

04d4e9b38a06442c06aebf28836ddb39.png

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

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

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

关注我的微信公众号,回复“加群”按规则加入技术交流群。

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。


推荐阅读
author-avatar
马克杯2502891103
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有