前言

先从最简单的无校验跳转开始:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//1.定义APP地址
uint32_t APP_ADDRESS=0x08008000;
typedef void (*pFunction) (void);
void JumpToApplication(void) {
if (((*(__IO uint32_t*)APP_ADDRESS) & 0x2FFE0000) == 0x20000000) {
//2.将中断向量长重定向到应用程序地址
SCB->VTOR=APP_ADDRESS;
//3.获取应用程序的栈顶地址和复位处理函数地址
pFunction app_reset_handler =(pFunction) (*(__IO uint32_t*)(APP_ADDRESS + 4));
__set_MSP(*(__IO uint32_t*)APP_ADDRESS);
//4.跳转到应用程序
app_reset_handler();
}
}