最近在做一个东西的时候需要软件复位,,我直接调用复位是成功了,,但是我的单片机上的继电器也发生动作了,现在最好的办法就是不采用加锁存器以其他的硬件的办法可以实现保留单片机的 的io口电平的就可以了
__set_FAULTMASK(1); // 关闭所有中端
NVIC_SystemReset(); // 复位
自己找了好多的资料但是还是说复位之后IO口电平还是会恢复为最初的状态,,但是有个大神说修改上面的复位函数,就可以保留IO口电平说的是操作内核的方法他说可以用的,但是我测试是不复位的 static __INLINE void NVIC_SystemReset(void)这是原来的复位函数
//{
// SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
// (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
// SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */
// __DSB(); /* Ensure completion of memory access */
// while(1); /* wait until reset */
//}
{
//置位VECTRESET
SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_VECTRESET_Msk); //两者不同之处,,就是修改了这个宏定义
__DSB();
while(1);
}
有没有大神这么做过,,或者还有什么好的办法没有,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>