当前位置: 代码迷 >> 综合 >> STM32F10X NVIC_SystemReset函数
  详细解决方案

STM32F10X NVIC_SystemReset函数

热度:6   发布时间:2023-12-09 03:41:32.0

STM32F10X NVIC_SystemReset函数


库中 NVIC_SystemReset函数的写法为:

static __INLINE void NVIC_SystemReset(void)
{
    __DSB();   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 */
}

_DSB()是数据同步隔离指令。比 DMB 严格,仅当所有在它前面的存储器访问操作都执行完毕后,才执行在它后面的指令(亦即任何指令都要等待存储器访问操作)。

对AIRCR寄存器的写操作必须对VECTKEY区域写0x5FA才能生效。SYSRESETREQ位写1重启。

对SYSRESETREQ位写1会重启STM32并将所有IO口状态还原到默认状态。

此外,还可以对VECTRESET位写1,也可以重启STM32,并且io口保持当前状态,但是cortex-m3的官方说明上是这样说的:Reserved for Debug use. This bit reads as 0. When writing to the register you must write 0 to this bit, otherwise behavior is Unpredictable.
意思就是这位主要是调试用的,如果写1可能会造成其他不可预测的结果。