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
}

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值