1、阅读《CM3权威指南》,指出复位时,写入AIRCR的值为(0x5FA<<16)|0x4,但在该过程中,到内核执行需要一定延时,因此可能会继续往后执行,直到复位生效,同样此时也会响应外部中断,为此,我们在执行之前置位FAULTMASK,屏蔽除NMI之外的所有中断;并且当执行完复位赋值之后,为了不执行后面的程序,因此在执行完之后,加入while死循环。即:
__set_FAULTMASK(1);
NVIC_SystemReset();
推荐使用系统复位!
2、采用改变PC值的方式,让PC重新指向复位向量所指向的值。即:
void Reset(void)
{
void (*fp)(void);
fp = (void (*)(void))(* (vu32 *)(0x8000004));
(*fp)();
}
推荐方法:改进(装载MSP):
typedef void(*pFunction)(void); //定义函数指针原型
void Resettest(void)
{
pFunction pReset;
uint32_t resetPC;
resetPC =