有两种方法,一种是调用系统复位函数,另一种是跳到程序起点。
1.调用系统复位函数法:
void SoftReset(void)
{ __set_FAULTMASK(1); // 关闭所有中端
NVIC_SystemReset(); // 复位
}
总结,这种方法有时候会不起作用。所以,还是第2重方法比较好。
2跳转法文章来源:https://www.toymoban.com/news/detail-503638.html
参考:STM32之系统重启文章来源地址https://www.toymoban.com/news/detail-503638.html
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
}
到了这里,关于stm32软件复位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!