打印
[应用相关]

系统复位方式有哪些

[复制链接]
1058|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
复位
AT32F403A/407 支持三种复位形式,分别为系统复位、上电复位和备份区域复位。


系统复位
除了时钟控制器的 RCC_CTRLSTS 寄存器中的复位标志位和备份区域中的寄存器(见图 2-1 各电源域
框图)以外,系统复位将复位所有寄存器至它们的复位状态。
当发生以下任一事件时,产生一个系统复位:
1. NRST 引脚上的低电平(外部复位)
2. 窗口看门狗计数终止(WWDG 复位)
3. 独立看门狗计数终止(IWDG 复位)
4. 软件复位(SW 复位)
5. 低功耗管理复位可通过查看RCC_CTRLSTS控制状态寄存器中的复位状态标志位识别复位事件
来源。
软件复位:
通过将 Cortex™-M4F 中断应用和复位控制寄存器中的 SYSRESETREQ 位置’1’,可实现软件复位。请
参考 Cortex™-M4 技术参考手册获得进一步信息。
低功耗管理复位:
在以下两种情况下可产生低功耗管理复位:
1. 在进入待机模式时产生低功耗管理复位:通过将用户选择字节中的 nSTDBY_RST 位置’0’将
使能该复位。这时,即使执行了进入待机模式的过程,系统将被复位而不是进入待机模式。
2. 在进入停止模式时产生低功耗管理复位:通过将用户选择字节中的 nSTP_RST 位置’0’将使能
该复位。这时,即使执行了进入停机模式的过程,系统将被复位而不是进入停机模式。


电源复位
当以下事件中之一发生时,产生电源复位:
1. 上电/掉电复位(POR/PDR 复位)
2. 从待机模式中返回
电源复位将复位除了备份区域外的所有寄存器。(见图 2-1)
图中复位源将最终作用于 RESET 引脚,并在复位过程中保持低电平。复位入口矢量被固定在地址
0x0000_0004。
芯片内部的复位信号会在 NRST 引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有至少
20μs 的脉冲延时;当 NRST 引脚被拉低产生外部复位时,它将产生复位脉冲。



备份域复位
备份区域拥有两个专门的复位,它们只影响备份区域(见图 2-1)。当以下事件中之一发生时,产生备份
区域复位。
1. 软件复位,备份区域复位可由设置备份域控制寄存器(RCC_BDC)(见 3.3.9 节)中的 BDRST
位产生。
2. 在 VDD 和 VBAT 两者掉电的前提下,VDD 或 VBAT 上电将引发备份区域复位。







使用特权

评论回复
沙发
muyichuan2012|  楼主 | 2020-12-17 10:05 | 只看该作者
本帖最后由 muyichuan2012 于 2020-12-17 10:16 编辑

软件实现系统复位方式:
NVIC_SystemReset();
函数原型位置:AT32F4xx_StdPeriph_Lib_V1.x.x\Libraries\CMSIS\CM4\CoreSupport中core_cm4.h
函数原型:

/**
  \brief   System Reset
  \details Initiates a system reset request to reset the MCU.
*/
__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();
  }
}

使用特权

评论回复
板凳
hoop| | 2020-12-17 18:20 | 只看该作者
比较习惯用NVIC_SystemReset();和IWDG,感觉这两个足够预防各种代码问题了

使用特权

评论回复
地板
明天真的好| | 2020-12-17 20:13 | 只看该作者
其实内部的滤波器使用的时候,还是需要注意的,不然会出现问题。

使用特权

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

本版积分规则

198

主题

1913

帖子

29

粉丝