这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » Cortex-M3/M4的软件复位

共2条 1/1 1 跳转至

Cortex-M3/M4的软件复位

院士
2025-01-19 09:56:37     打赏

我们在嵌入式项目里面其实很少应用到复位,也只有在系统出现异常的情况下,我们才迫不得已使用复位,比如看门狗复位。其实,还有一种情况,我们需要手动复位一下系统——那就是我们的在线固件升级程序的触发。在这种情况下,我们就要用到了软件复位的操作。在Cortex-M3和Cortex-M4内核下的各系列MCU都是使用应用中断和复位控制寄存器(AIRCR)实现的。复位只与寄存器中的第2位,16~31位有关。下图是寄存器位的详细描述。

这里需要注意的是:

- 高16位是允许操作的key,读出时为0xFA05。在写入的时候必须为0x05FA,这样其余的位操作才会生效。

- bit1置位,系统复位生效。回读此位是零

写了这么多的原理性的东西,在我们项目应用的时候也没有啥用。其实,ARM的头文件里面已经为我们编写好了调用的API函数NVIC_SystemReset(),其在Core_cm3.h与Core_cm4.h文件中。

/**
 \brief   System Reset
 \details Initiates a system reset request to reset the MCU.
*/
__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
{
 __DSB();                                                          /* Ensure all outstanding memory accesses included
                                                                      buffered write are completed before reset */
 SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |
                          (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
                           SCB_AIRCR_SYSRESETREQ_Msk    );         /* Keep priority group unchanged */
 __DSB();                                                          /* Ensure completion of memory access */

 for(;;)                                                           /* wait until reset */
 {
   __NOP();
 }
}

系统的软件复位就是调用一下这个小小的函数,复位之后,系统就干净了,也可以进入我们的固件更新程序了。




关键词: Cortex-M4     Cortex-M3     软件     复位    

院士
2025-01-19 11:24:19     打赏
2楼

谢谢分享,学习学习。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]