39
253
814
高级技术员
2722063d63b32a6239.png (20.69 KB )
下载附件
2023-1-29 17:24 上传
9356663d63b2b24c14.png (18.15 KB )
2023-1-29 17:23 上传
使用特权
JumpAddress = *( __IO uint32_t* )( ApplicationAddress + 4 ); //用户代码区第二个字存储为新程序起始地址(新程序复位向量指针) Jump_To_Application = ( pFunction ) JumpAddress; __set_MSP( *( __IO uint32_t* ) ApplicationAddress ); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) Jump_To_Application(); //设置PC指针为新程序复位中断函数的地址
__disable_irq(); // 可以使用这个函数 关闭总中断 __set_FAULTMASK(1); //关闭中断,确保跳转过程中 不会进入中断,导致跳转失败 NVIC_SystemReset(); //系统复位,复位后默认从MCU的起始地址开始, 也就是BOOT的起始地址开始, 这样程序就从APP回到了BOOT,再从BOOT跳转至APP的时候, 堆栈已经清除了,也就不会发生溢出 上面是我写给自己的, 避免以后再犯错, 在下能力有限 如有不对之处,恳请大佬指点,感激不尽!
100
857
2610
初级工程师
发表回复 本版积分规则 回帖后跳转到最后一页
人才类勋章
时间类勋章
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号