首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

浅析STM32 Bootloader设计(2)

浅析STM32 Bootloader设计(2)

4.跳转到新程序运行  更新完程序后就需要跳转到新程序开始运行,具体实现看下面代码:
本文引用地址:http://www.eepw.com.cn/article/174370.htm  typedef void (*iapfun)(void); //定义一个函数类型的参数
  iapfun jump2app;
  __asm void MSR_MSP(u32 addr) //设置堆栈指针
  {
        MSR MSP, r0
        BX r14
  }
  //跳转到应用程序段
  //appxaddr:用户代码起始地址.
  void iap_load_app(u32 appxaddr)
  {
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
        {
              jump2app = (iapfun)*(vu32*)(appxaddr+4);//用户代码区第二个字为程序开始地址(复位地址),此处查看中断向量表可知
              MSR_MSP(*(vu32*)appxaddr);//初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
              jump2app(); //跳转到APP,执行复位中断程序
        }
  }
  APP程序设计注意
  1.编译软件需要做出设置:
  在Bootloader程序中已经指定了APP程序存储的起始地址为0x08010000,所以在APP程序设计时需要将编译软件这里做出设置,修改起始地址和大小。
  2.修改system_stm32f10x.c文件
  同样是针对于APP的起始地址改变而修改这里的偏移量,如上图所示。
  文中只是简单的介绍了关于Bootloader程序的设计,作为抛砖引玉,大家可以继续深入,添加数据校验和程序加密等。
继承事业,薪火相传
返回列表