stm32 bootloader跳转程序设计

文章目录

1、bootloader跳转程序设计

(1)跳转程序

复制代码
pFunction JumpToApplication;
uint32_t JumpAddress;
void BootLoad_Jump(void)
{
/* Check Vector Table: Test if user code is programmed starting from address
"APPLICATION_ADDRESS" */
if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
{   
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS+4); // 取中断向量表中的复位中断地址
HAL_Delay(100);
   __disable_irq();  //关闭所有中断,在跳转后使能中断
//    SCB->VTOR = FLASH_BASE |VECT_TAB_OFFSET;
JumpToApplication = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
JumpToApplication();
 }
}

(2)、app程序中需要注意

<1>、在keil中ROM起始地址和分配的空间大小

<2>、在system_stm32f4xx.c中设置VECT_TAB_OFFSET为需要偏移的地址

<3>、main函数中使能中断

总结:

Bootloader里面主要是

1、设置bootloader和app的空间

2、接收编译好的app的bin文件,写入flash

3、实现跳转

App里面主要修改的地方是

1、 ROM起始地址和分配的空间大小

2、 重定向中断向量

3、 生成bin文件

这里就是整个程序执行的流程

相关推荐
蓝斯4977 小时前
从.到实现一个Windows上的虚拟hid键盘设备
windows·单片机·计算机外设
熙芯XiChip7 小时前
硬实时与软实时RTOS核心区别
嵌入式硬件
伟大的前程8 小时前
unsigned int 定义的变量 在 电脑的 64 位系统中 和 32 位 cortex-m0 和 8 位的 51 单片机
单片机·嵌入式硬件
小渔村的拉线工8 小时前
1.HPM6E80 解析芯片整体工作原理和存储架构
单片机·嵌入式硬件·mcu·架构·hpm6e80
熙芯XiChip9 小时前
CAN与CANopen的本质区别
单片机
lilihewo9 小时前
Altium Designer 封装库的创建(分享pcb 3D封装库)
嵌入式硬件·51单片机
神罚天下ET10 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
碧海银沙音频科技研究院11 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
Zevalin爱灰灰12 小时前
模拟信号链电路——基于TL431的电压基准电路
单片机·嵌入式硬件
csdn杰哥12 小时前
瑞萨单片机开发教程[二十七] DTC 外部中断触发传输实验
单片机·嵌入式硬件·mongodb·瑞萨·ra6m5