你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32单片机远程升级

[复制链接]
STMCU小助手 发布时间:2022-11-25 14:06
1、需要两份程序
        BootLoader和App程序,两份程序均可以通过jlink下载,只需要将下载地址修改一下即可:

8e956931c5ee466884d065af87491131.png
82f0f86db97b41408c8db23fe2b89f8e.png


2、在BootLoader中的跳转函数
  1. #define        APP_FLASH_ADDR 0x8008000

  2. iap_load_app(APP_FLASH_ADDR);
复制代码
  1. //#include "include.h"
  2. #include "iap.h"
  3. #include "main.h"

  4. //Ìø×ªµ½Ó¦ÓóÌÐò¶Î
  5. //appxaddr:Óû§´úÂëÆðʼµØÖ·.
  6. typedef  void (*iapfun)(void);//¶¨ÒåÒ»¸öº¯ÊýÀàÐ͵IJÎÊý.
  7. iapfun jump2app;
  8. //ÉèÖÃÕ»¶¥µØÖ·
  9. //addr:Õ»¶¥µØÖ·
  10. __asm void MSR_MSP(u32 addr)
  11. {
  12.     MSR MSP, r0                         //set Main Stack value
  13.     BX r14
  14. }
  15. /******************************************************************************
  16. *                 Function name                £º iap_load_app
  17. *    Function describe     £º Ìø×ªµ½app³ÌÐò¡£
  18. *                         Input                    £º appxaddr£ºapp³ÌÐòµÄµØÖ·¡£                                          
  19. *                         Output                    £º No
  20. *                  Illustration            £º  
  21. *                        Revise                        £º
  22. *                 Existing problems         :  No
  23. *****************************************************************************/
  24. void iap_load_app(u32 appxaddr)
  25. {
  26.         if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //¼ì²éÕ»¶¥µØÖ·ÊÇ·ñºÏ·¨.
  27.         {
  28.                 jump2app=(iapfun)*(vu32*)(appxaddr+4);//Óû§´úÂëÇøµÚ¶þ¸ö×ÖΪ³ÌÐò¿ªÊ¼µØÖ·(¸´Î»µØÖ·)               
  29.                 MSR_MSP(*(vu32*)appxaddr);//³õʼ»¯APP¶ÑÕ»Ö¸Õë(Óû§´úÂëÇøµÄµÚÒ»¸ö×ÖÓÃÓÚ´æ·ÅÕ»¶¥µØÖ·)
  30.                 jump2app();        //Ìø×ªµ½APP.
  31.         }
  32. }
复制代码

3、在app中修改中断向量表的偏移地址

b609ad1e02914654a6308be3752384d1.png

bf99979237a54337a59f7cafb18b414b.png

fcbdc68bcb9746f9b82c5cc417599883.png

4、程序自动选择向量表的偏移地址
适用场景,一颗芯片里面有3个程序:
1.BootLoader程序,起始地址:0x08000000
2.APP1程序,起始地址:0x08008000
3.APP2程序,起始地址:0x08013000

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

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

7f1232281f35429a8b6093c4235b4729.png

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

76b1f12505624ee7818a2d4562097b83.png

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


收藏 评论0 发布时间:2022-11-25 14:06

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版