你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32复位源判断

[复制链接]
STMCU小助手 发布时间:2022-3-21 13:41
在项目中有时候会遇到单片机莫名奇妙复位的情况,为了判断是那种原因引起复位,就需要对单片机的复位源进行判断。现用STM32F103C8T6单片机进行测试。
先看看单片机复位源都有哪些?
2Q2]Y(B`I4%R767XDN]C7ZF.png

在STM32中文参考手册中可以看到,复位源可以通过状态寄存器来读出。
于是写一段程序来读取复位状态寄存器:

  1. void Check_Rst(void)
  2. {
  3. printf(" CSR = %x\r\n", RCC->CSR);
  4. if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET ) // NRST 引脚复位
  5. {
  6. printf("PIN reset \r\n");
  7. }
  8. if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET ) // 上电掉电复位
  9. {
  10. printf("POR/PDR reset \r\n");
  11. }
  12. if(RCC_GetFlagStatus(RCC_FLAG_SFTRST) != RESET ) //  软件复位
  13. {
  14. printf("Software reset  \r\n");
  15. }
  16. if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET ) // 独立看门狗复位
  17. {
  18. printf("Independent watchdog reset \r\n");
  19. }
  20. if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET ) // 窗口看门狗复位
  21. {
  22. printf("Window watchdog reset \r\n");
  23. }
  24. if(RCC_GetFlagStatus(RCC_FLAG_LPWRRST) != RESET ) // 低功耗复位
  25. {
  26. printf("(Low-power reset \r\n");
  27. }
  28. RCC_ClearFlag();                        //清除复位标志
  29. printf("\r\n");

  30. }
复制代码

通过串口将信息打印出来。
现在写个程序测试,引脚复位、掉电复位、看门狗复位都比较好测试。就是软件复位要用代码实现。通过查找资料发现软件复位可以分为系统复位和内核复位。系统复位会复位所有硬件电路,包括IO口状态。内核复位只复位内核,不影响硬件电路。
系统复位实现代码如下:

  1. //系统复位  所有电路都会复位
  2. void mcuSysRestart(void)
  3. {
  4. __set_FAULTMASK(1);         //关闭所有中断
  5. NVIC_SystemReset();  //系统复位   源码见 core_cm3.h 文件 static __INLINE void NVIC_SystemReset(void) 函数

  6. }
复制代码

内核复位代码如下:
  1. //内核复位  不会影响外设和其他电路
  2. void mcuCoreRestart(void)
  3. {
  4. __DSB();
  5. //置位VECTREST
  6. SCB->AIRCR = ((0x5FA AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
  7. SCB_AIRCR_VECTRESET_Msk);
  8. __DSB();
  9. while(1);
  10. }
复制代码

在程序中通过不同的按键控制不同复位情况,打印信息如下:
上电复位:

}HTUVN4ZMC(8)U8(7_)H{~O.png

按复位键复位:

[]_3S{MMA0{VU8W{M$TTD$D.png

独立看门狗复位:

O9]%X%(LA5[1]5F0XG[5][U.png

窗口看门狗复位:

PRCM{}U`83$D)%5$SVL8VRG.png

系统复位:

T1){}7J7TF~%U_U)T[1G8{W.png

内核复位:

6N@61AY`TTTH[$NW23GHM.png

通过上面复位测试可以发现,每种复位都会检测到NRST 引脚复位,难道每种复位都会将复位引脚电平拉低吗?通过示波器看看复位引脚电平:

25BIO2`Z_$D3$CD4$]9JHES.png

通过复位引脚波形可以看出,在其它复位情况发生时,复位引脚会有一个很短的负脉冲。说明其他复位源产生时,复位引脚电平也会变化。看来上面程序检测是正确的。


收藏 评论0 发布时间:2022-3-21 13:41

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版