STM32F407VET6学习笔记7:Bootloader跳转APP程序

boot跳转APP的程序

目录

Flash分区设定:

工程文件地址设置:

Bootloader工程文件:

测试的APP程序工程文件:

Bootloader跳转程序:

APP程序:


 

Flash分区设定:

参考手册的分区: 

工程文件地址设置:

Bootloader工程文件:

Debug -> settings

 

测试的APP程序工程文件:

他的34000是这么计算得来的:

Bootloader跳转程序:

 这里跳转之前__disable_irq();关闭了所有中断

在APP程序需要调用__enable_irq();重新启用中断

而且调用__enable_irq();之前这些中断初始化已经完成,能进入

typedef void (*pFunction)(void);
pFunction Jump_To_Application;
#define ApplicationAddress      0x0800C000
#define FMC_UPDATE_INFO_ADDR    0x08040000 //标志

__asm void MSR_MSP (uint32_t ulAddr)
{
    MSR MSP, r0 //set Main Stack value
    BX r14
}

void app_jump()
{
    uint32_t JumpAddress;
    __disable_irq();// 禁用所有中断
    JumpAddress = *(__IO uint32_t*)(ApplicationAddress + 4);
    /* Jump to user application */
    Jump_To_Application = (pFunction) JumpAddress;
    MSR_MSP(*(__IO uint32_t*) ApplicationAddress);
    Jump_To_Application();
}

这里我没有设置这个标志,所以会直接跳转APP 

 

 

APP程序:

进APP程序之前需要添加一些语句,防止不能进中断:

### STM32 Bootloader 跳转App 的实现方式及注意事项 #### 1. 配置内存布局 为了确保BootLoader能够顺利跳转至应用程序,需合理规划闪存分配。通常情况下,BootLoader占用前16KB的空间(即0x0800_0000~0x0800_4000),而应用代码则放置于其后的区域,例如从0x0800_4000开始[^1]。 #### 2. 设置启动参数 当准备切换执行流给用户程序时,应先调整栈指针(SP)指向目标位置处定义的新堆栈顶部,并设置PC寄存器等于入口函数地址。这些操作可通过读取位于APP区首部的两个字(word)完成——第一个代表初始SP值;第二个则是RESET_Handler的位置,也就是main()之前的重置处理例程起点。 ```c // 假设APP起始于0x08004000 #define APP_START_ADDRESS ((uint32_t)0x08004000) void JumpToApplication(void){ uint32_t jumpAddress; void (*jumpFunction)(void); /* 获取应用程序的初始SP */ __set_MSP(*(__IO uint32_t*)APP_START_ADDRESS); /* 获取应用程序的Reset Handler地址 */ jumpAddress = *(__IO uint32_t*)(APP_START_ADDRESS + 4); jumpFunction = (void(*)(void))jumpAddress; /* 执行跳转 */ jumpFunction(); } ``` #### 3. 关闭所有外设和中断 在进行实际跳跃之前,建议关闭除必要的UART通信接口之外的所有其他硬件资源和服务,尤其是那些可能触发异常响应机制的部分,比如定时器、DMA控制器等。这一步骤有助于减少潜在冲突并提高稳定性[^3]。 #### 4. 使用开发工具辅助下载 对于采用Keil MDK作为IDE环境的情况来说,在各自独立项目里通过菜单选项“Flash->Download”或者快捷键F8来进行固件刷写是一种简便有效的方法[^2]。不过需要注意的是,如果遇到无法自动转入App的问题,则可能是由于某些特定条件未满足所致,此时可尝试手动控制流程或借助仿真器逐步排查原因所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NULL指向我

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

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

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

打赏作者

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

抵扣说明:

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

余额充值