STM32 bootload 跳转到 app 方法记录_裸机版

3 篇文章 0 订阅

调试环境:STM32G474RBT6  +  Keil

说明:本文介绍如何从  bootload 跳转到 app 的方法

1:bootload 的跳转代码

在 app 代码接收完成并成功写入片内flash后,可调用以下代码实现跳转到 app;

#define OTA_CODE_START_ADD     (0x08007800)   /* app 区域储存的首地址 */

void jump_to_app(void)
{
    typedef void (*app_func_t)(void);
    u32 app_addr = OTA_CODE_START_ADD;
    u32 stk_addr = *((__IO uint32_t *)app_addr);
    app_func_t app_func = (app_func_t)(*((__IO uint32_t *)(app_addr + 4)));

    if ((((u32)app_func & 0xff000000) != 0x08000000) || ((stk_addr & 0x2ff00000) != 0x20000000))
    {
        return;
    }

    //rt_kprintf("Jump to application running ... \n");
    rt_thread_mdelay(200);

    __disable_irq();  /*关闭总中断*/
    HAL_DeInit(); /*函数通过写复位寄存器,将所有模块复位。*/

    for(int i=0; i<128; i++)
    {
        HAL_NVIC_DisableIRQ(i);  /*失能中断*/
        HAL_NVIC_ClearPendingIRQ(i);/*清除中断标志位*/
    }

    /* 关闭滴答定时器,复位到默认值 */
    SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;

    HAL_RCC_DeInit();    /*将RCC时钟配置重置为默认重置状态。*/

    __set_CONTROL(0);    /*设置CONTROL寄存器的值。在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针*/
    __set_MSP(stk_addr); /* 设置MSP跳转的地址;设置主堆栈指针 */
    app_func();          /* Jump to application running */
}

2:APP 代码设置

1.在 app 的 main()函数的第一段添加如下代码

SCB->VTOR = FLASH_BASE | OTA_CODE_START_ADD; /* 跳转到APP地址 */
__enable_irq();

3.修改KEIL 配置

点击魔术棒,打开设置界面,按如下图示设置。

4.完成配置

完成以上设置后 就能成功从 bootload 跳转到 app

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值