一、设置内核控制寄存器 core control register
__set_CONTROL(0);
二、关闭所有中断
__disable_interrupt();
三、复位
在应用中断和复位控制寄存器中写入0x5fa0004
代码: *((volatile uint32_t *)0xE000ED0C) = 0x05fa0004;
四、跳转
1、获取要跳转地址的栈顶地址
SpInitVal = *(uint32_t *)dwJumpAddr;
2、获取要跳转地址+4地址位置的中断向量地址
JumpAddr = *(uint32_t *)( dwJumpAddr + 4);
3、将新的栈顶地址放入MSP
__set_MSP(SpInitVal); //设置SP.,堆栈栈顶地址
4、将新的中断向量地址赋值给函数指针
pFun = (void (*)(void))JumpAddr; //生成跳转函数.将复位中断向量地址做为函数指针
5、执行函数,实现跳转
(*pFun) (); //执行函数,实现跳转.不再返回.