在项目中有时候会遇到单片机莫名奇妙复位的情况,为了判断是那种原因引起复位,就需要对单片机的复位源进行判断。现用STM32F103C8T6单片机进行测试。
先看看单片机复位源都有哪些?

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

void Check_Rst(void)
{printf(" CSR = %x\r\n", RCC->CSR);if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET ) // NRST 引脚复位{printf("PIN reset \r\n");}if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET ) // 上电掉电复位{printf("POR/PDR reset \r\n");}if(RCC_GetFlagStatus(RCC_FLAG_SFTRST) != RESET ) //  软件复位{printf("Software reset  \r\n");}if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET ) // 独立看门狗复位{printf("Independent watchdog reset \r\n");}if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET ) // 窗口看门狗复位{printf("Window watchdog reset \r\n");}if(RCC_GetFlagStatus(RCC_FLAG_LPWRRST) != RESET ) // 低功耗复位{printf("(Low-power reset \r\n");}RCC_ClearFlag();           //清除复位标志printf("\r\n");}

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

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

内核复位代码如下:

//内核复位  不会影响外设和其他电路
void mcuCoreRestart(void)
{__DSB();//置位VECTRESTSCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |SCB_AIRCR_VECTRESET_Msk);__DSB();while(1);
}

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

按复位键复位:

独立看门狗复位:

窗口看门狗复位:

系统复位:

内核复位:

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

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

STM32复位源判断相关推荐

  1. STM8单片机复位源判断

    最近在调试系统的时候,发现单片机老是复位,于是想着用程序来判断一个单片机的复位信号是来自于哪里.查找资料发现STM8单片机的复位源总共有9种 ●NRST引脚产生的外部复位 ● 上电复位(POR) ● ...

  2. STM32-F407入门学习专题(二) STM32复位和中断

    系列文章目录 第2章 STM32复位启动和中断控制 目录 系列文章目录 前言 1 NVIC-嵌套向量中断控制器 1.1 NVIC寄存器 1.2 中断优先级分组 1.3 NVIC相关函数 2 中断配置实 ...

  3. stm32中断源有哪些_STM32常见问题汇总

    1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备2.Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm ...

  4. stm32中断源有哪些_143条 超详细整理STM32单片机学习笔记(必看)

    点击上方蓝色字关注我们~ 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f10x.h相当于reg52.h(里面有基本的 ...

  5. 杰理之AD14N系列程序获取复位源与唤醒源接口介绍【篇】

    复位源: u8 power_reset_source_dump(void) 此接口获取得到复位源以十六进制数表示,十六进制换成二进制数后可根据第几位置1对比上面链接所示信息以得到相应的复位源,继而可以 ...

  6. 全新STM32 PID温控‘包括‘PID源码‘PCB‘源理图 全新自整定PID温控 STM32温控源码 … 资料参考价值较高,内含PCB+原理图+程序,内容完整。

    全新STM32 PID温控'包括'PID源码'PCB'源理图 全新自整定PID温控 STM32温控源码 - 资料参考价值较高,内含PCB+原理图+程序,内容完整. 注:STM32程序使用IAR打开 注 ...

  7. STM32复位死机(无法启动)

    STM32复位死机(无法启动) 嗯,不知道怎么说,stm32的看门狗死机了,下面是仿真时报错信息: The processor has escalated a configurable-priorit ...

  8. BMP180气压传感器详解与示例(STM32 附带源码)

    BMP180气压传感器详解与示例(STM32 附带源码) 简介 工作模式 校准数值 测试流程 第一步:微处理器读取校准数值 第二步:读取温度.气压初始值 第三步:计算温度.气压 第四步:计算海拔高度 ...

  9. STM32开发 -- 复位类型判断

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/87179586 复位类型的情况有多种,会导致MCU重启. 因此我们有必要确认一 ...

最新文章

  1. React-状态提升
  2. 数据集shuffle方法中buffer_size的理解
  3. redis类型[string 、list 、 set 、sorted set 、hash]
  4. commons-lang3工具类学习(二)
  5. 【包邮送书活动】20210924期-开奖通知
  6. 随想系列_4_从电影《可可西里》说起
  7. 基于SARIMA-LSTM的门诊量预测研究
  8. NUC1100 Biorhythms【中国剩余定理】
  9. 国外优秀免费空间推荐 可用于测试或临时备份
  10. 苹果在研发屏下 Face ID 和 Touch ID该技术可能最终不会商用
  11. 自然语言处理之中文文本分析(jieba分词、词袋doc2bow、TFIDF文本挖掘)
  12. 实验一:Cifar10图像分类竞赛 学习记录
  13. 3分钟弄明白顶级域名二级域名子域名父域名的区别
  14. js实现公司年会抽奖活动(亲测可用)
  15. SMOTE-IPF:通过带滤波的重采样方法解决不平衡分类中的噪声和边界样本问题
  16. git pull 时每次都要输入用户名和密码的解决办法
  17. vue项目访问的时候,用localhost能访问,但是用本机ip就不能访问 的解决办法,亲测有效
  18. 创建父需求子需求构建需求树_用pc构建DIY计算集群(超级计算机)
  19. iOS12网页视频播放点击全屏按钮会导致闪退
  20. [2019年]研究生数学建模竞赛

热门文章

  1. 10个精妙的Java编码最佳实践
  2. 也谈基于Web的含工作流项目的一般开发流程
  3. Oracle中无法解析TNS的陷阱
  4. Hotmail的2G邮箱被收回,只剩250M了
  5. 12. 我的第一个容器化应用
  6. windows .bat批处理实现进程监控确保程序运行
  7. 十大经典排序算法之冒泡排序【一】
  8. MapReduce-从HBase读取数据处理后再写入HBase
  9. FIFO队列 ADT接口 链表实现
  10. 结构体全局变量成员赋值