stm32 引导加载程序跳转程序设计
最编程
2024-10-04 11:23:58
...
文章目录
- 1、bootloader跳转程序设计
- (1)跳转程序
- (2)、app程序中需要注意
- 、在keil中ROM起始地址和分配的空间大小
- 、在system_stm32f4xx.c中设置VECT_TAB_OFFSET为需要偏移的地址
- 、main函数中使能中断
- 总结:
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文件
这里就是整个程序执行的流程
推荐阅读
-
stm32 引导加载程序跳转程序设计
-
如何使用树莓派5修复EEPROM引导加载程序并恢复镜像影像
-
功能信息更全面的开源引导加载程序 OpenBLT,支持 USB、CAN、232 和 TCP/IP (2020-07-28)
-
Arch Linux 切换 rEFInd 引导加载程序
-
如何为 linux 设置引导加载程序
-
Freescale Freescale HCS12 系列微控制器引导加载程序详情 (a)
-
为飞思卡尔系列微控制器开发引导加载程序的初步经验
-
Plankton Equity Embedded:Freescale Kinetis MCU 启动程序 (2) - KBOOT 格式(ROM/引导程序/闪存加载程序)
-
Plankton Equity Embedded:Freescale Kinetis MCU 启动程序 (2) - KBOOT 格式(ROM/引导程序/闪存加载程序)
-
NRF52832 在 OTA 升级期间修改引导加载程序蓝牙 MAC