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可能会造成其他不可预测的结果。