STM32如何跳转到指定地址执行程序

Posted Mculover666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32如何跳转到指定地址执行程序相关的知识,希望对你有一定的参考价值。

跳转代码

void boot_jump_to_run(uint32_t addr)
{
    uint32_t jmp_addr;

    /* Check if user code is programmed starting from address addr */
    if (((*(uint32_t *)addr) & 0x2FFE0000) == 0x20000000) {
        /* Jump to user application */
        jmp_addr = *(uint32_t *)(addr + 4);

        /* Initialize user application's Stack Pointer */
        __set_MSP(*(uint32_t *)addr);
        ((void (*)(void))jmp_addr)();
    }
}

跳转原理

① 使用__set_MSP修改栈顶指针sp;
② 指定地址+4得到下一条指令的地址,将此地址转换为函数指针,执行该函数即跳转。

以上是关于STM32如何跳转到指定地址执行程序的主要内容,如果未能解决你的问题,请参考以下文章

关于STM32 KEIL MDK环境下,程序在RAM中调试的问题

跳转到应用程序时中断不起作用(STM32)

如何在 STM32 F072 的软件中跳转到引导加载程序(DFU 模式)?

如何让STM32F429NI中的bootloader跳转到外部Nor Flash

STM32F030 BootLoader与应用程序的跳转设置

STM32开发——bootloader跳转App执行的实现