STM32 IAP - Boot跳转到APP

简单IAP设计思路:

  • 单片机上电首先运行BootLoader程序;
  • Bootloader如果检测到需要更新APP,则首先进行更新,更新完成后跳转到APP并运行;
  • Bootloader如果检测到不需要更新APP,则直接跳转到APP并运行。

本文仅介绍如何从Bootloader跳转到APP,以下为跳转过程在BootLoader及APP中分别需要进行的操作:

1.BootLoader

如下为跳转函数,定义好APP起始地址FLASH_APP_ADDR ,然后调用Jump_to_APP()即可跳转到APP。

注意:为避免跳转后执行出错,调用跳转函数前最好对所有外设进行DeInit。

#define FLASH_APP_ADDR 0x08010000 //你的APP存放起始地址
typedef  void (*pFunction)(void);
pFunction Jump_To_Application;
void Jump_to_APP()
{
        uint32_t JumpAddress;
 
        /* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
        if (((*(volatile uint32_t*)FLASH_APP_ADDR) & 0x2FFE0000 ) == 0x20000000)
        {
                /* Jump to user application */
                JumpAddress = *(volatile uint32_t*) (FLASH_APP_ADDR + 4);
                Jump_To_Application = (pFunction) JumpAddress;
                /* Initialize user application's Stack Pointer */
                __set_MSP(*(volatile uint32_t*) FLASH_APP_ADDR);
                Jump_To_Application();
        }
}

2.APP

在APP的main函数中首先执行:

//0x10000 为APP中断向量表偏移量
NVIC_SetVectorTable(NVIC_VectTab_FLASH,(0x10000));

其中,APP中断向量表偏移量=APP存放起始地址相对于单片机ROM起始地址的偏移量。STM32的ROM起始地址0x8000000,本例中APP存放地址为0x8010000,故偏移量=0x8010000-0x8000000。

注意:需要在IDE中配置APP的ROM起始地址,否则APP将无法运行,对于KEIL配置方法如下:

打开工程配置-Target,将如图红框内地址修改为APP的实际起始地址。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TalonShaw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值