STM32F103的Bootloader开发——Boot跳转至APP


前言

  Boot很大的一个作用是用来跳转至APP,在汽车行业中,控制器Boot开发跳转至APP之前会检验程序有效性是否存在(一般为固定的4个字节的地址),此外信息安全还会要求安全启动,都是在Boot跳转之前做文章。我们目前使用到的仅仅是Boot在某个状态持续10秒,如果10秒之内没有收到升级内容,就会自动跳转至APP,APP会发送一个串口数据给到上位机,来检测是否跳转成功。


一、Boot和APP的内存分区

  本文Boot地址是0x8000000~0x8004FFF共计0x5000个字节大小;APP起始地址是0x8005000。在Keil中通过下面可以修改起始地址和大小:
在这里插入图片描述

  Boot和APP按照上面的配置号好以后,生成hex文件,会看到hex的起始地址与配置相对应。如何生成hex请把Keil的下面配置打开:
在这里插入图片描述

二、Boot跳转APP验证

1. Boot跳转代码

  Boot在一个默认的IDLE状态持续10秒,如果没有收到串口报文,跳转至APP,跳转代码如下:

case SERVICE_IDLE:
     BootJumpToAppTmr_u16++;//Idle状态,计数器不断累加,10ms任务,当计数器大于1000时执行跳转
     if(BootJumpToAppTmr_u16 >= 1000)     
     {
        //jump to app
        Jump_To_Application();
     }   
break;
#define APP_ENTRY_ADDR   (0x08005000) // 应用程序的入口地址
typedef void (*BootToApp)(void);                   
BootToApp jump2app;
// 跳转到应用程序的函数
void Jump_To_Application(void) 
{   
  jump2app = (BootToApp) * (volatile uint32_t *)(APP_ENTRY_ADDR + 4);
  __set_MSP(*(volatile uint32_t *)APP_ENTRY_ADDR);  
  NVIC->ICER[0] = 0xFFFFFFFF; // 禁用所有中断        
  NVIC->ICPR[0] = 0xFFFFFFFF; // 清除所有中断挂起位
  jump2app();
}

2.下载hex

  使用下载工具将生成的hex文件下载至单片机中,我这里使用的STM官网下载的STM32 ST LINK Utility,此工具可以下载hex,也可以查看Flash地址的值是否写入以及写入的是否正确。

  APP和Boot的hex文件如下:

  首先使用ST LINK Utility先擦除整个FLASH区域。
在这里插入图片描述

  先下载Boot的hex:
在这里插入图片描述
在这里插入图片描述

  再下载APP的hex:
在这里插入图片描述

3.跳转验证

在这里插入图片描述

  以上步骤执行完,Boot等待10秒会自动跳转至APP。可以在APP里面自己建一个跑马灯来验证是否进入APP,我这里也有跑马灯,只是演示不是很方便,就用串口报文来验证了。

4.如何使用一个hex来验证

  烧写两步有点繁琐,能不能使用一个hex来进行验证呢?当然可以,其实这里就涉及到一个控制器开发生产的刷写问题了。控制器开发至生产阶段,为了简化步骤会将APP和Boot同时烧写进单片机。这里就涉及到一个Merge的概念了,我们将上面的两个hex合并到一个hex,然后将合并的hex烧写进单片机,看看是否也能验证跳转成功。

  使用hexview打开Boot的hex文件,点击File里面的Merge,然后选择APP的hex文件,跳出的选项选择默认,点击OK。提示原来的hex文件改变了,此时不要选择Save,否则会覆盖掉原来的hex文件,选择重新保存一个hex文件。
在这里插入图片描述

  使用ST LINK重新执行先擦除整个Chip,然后再刷写刚才merge的hex文件。同样上位机也接收到APP发送来的串口报文。这里就不演示了。

Tips:上面的Merge过程可以使用bat脚本来实现

总结

  以上就是今天分享的内容,验证了Boot跳转至APP的有效性,这个步骤特别重要,否则Boot就没有什么作用了。有任何问题可以与我随时交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值