STM32软件复位方法详解
有两种方法,一种是调用系统复位函数,另一种是跳到程序起点。
1.调用系统复位函数法:
void SoftReset(void)
{ __set_FAULTMASK(1); // 关闭所有中端
NVIC_SystemReset(); // 复位
}
总结,这种方法有时候会不起作用。所以,还是第2重方法比较好。
2跳转法
参考:STM32之系统重启
int boot_jump(u32 Map, u32 Reset)
{
__set_MSP(Map);
((void(*)())(Reset))();
}
void soft_reset_do(void)
{
u32 addr = 0x08000000;//APP_ADDR0;
u32 base = addr > NVIC_VectTab_FLASH ? NVIC_VectTab_FLASH:NVIC_VectTab_RAM;
u32 offset = addr - base;
NVIC_SetVectorTable(base, offset);
u32 map = *((u32* )addr);
u32 reset = *((u32*)(addr + 4));
boot_jump(map,reset);
//————————————————
//版权声明:本文为CSDN博主「liliye」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/liliye/article/details/46772457
}