发新帖我要提问
123
返回列表
打印
[N32G45x]

如何进行软复位?

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
41
Pretext| | 2023-11-10 18:43 | 只看该作者 回帖奖励 |倒序浏览
这就像发送一个软件复位命令,MCU重新开始运行,几乎就像停电后重新启动一样

使用特权

评论回复
42
LIKANG37| | 2023-11-29 09:20 | 只看该作者
// 软件复位函数
void System_Reset(void)
{
    __set_FAULTMASK(1); // 关闭所有中断
    NVIC_SystemReset(); // 进行软件复位
}

使用特权

评论回复
43
LIKANG37| | 2023-11-29 09:22 | 只看该作者
/**
  \brief   Set Fault Mask
  \details Assigns the given value to the Fault Mask register.
  \param [in]    faultMask  Fault Mask value to set
*/
__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask)
{
  __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory");
}


/**
  \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();
  }
}

使用特权

评论回复
44
V853| | 2024-2-1 22:59 | 只看该作者
有一个直接复位语句,但我不确定是否所有的微控制器都可以普遍使用它

使用特权

评论回复
45
鹿鼎计| | 2024-2-2 01:49 | 只看该作者
可以经由过程外部电路或者内部电路实现复位。

使用特权

评论回复
46
天天向善| | 2024-2-2 20:59 | 只看该作者
其实复位的方法也不少,最常用的是看门狗复位

使用特权

评论回复
47
朝生| | 2024-3-2 11:23 | 只看该作者
一般来说,它是一个特定的汇编指令或函数调用。

使用特权

评论回复
48
软核硬核| | 2024-3-6 17:10 | 只看该作者
一些微控制器允许修改复位向量的值在程序中设置为程序的起始地址,以实现软复位。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则