STM32复位源判断
在项目中有时候会遇到单片机莫名奇妙复位的情况,为了判断是那种原因引起复位,就需要对单片机的复位源进行判断。现用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复位源判断相关推荐
- STM8单片机复位源判断
最近在调试系统的时候,发现单片机老是复位,于是想着用程序来判断一个单片机的复位信号是来自于哪里.查找资料发现STM8单片机的复位源总共有9种 ●NRST引脚产生的外部复位 ● 上电复位(POR) ● ...
- STM32-F407入门学习专题(二) STM32复位和中断
系列文章目录 第2章 STM32复位启动和中断控制 目录 系列文章目录 前言 1 NVIC-嵌套向量中断控制器 1.1 NVIC寄存器 1.2 中断优先级分组 1.3 NVIC相关函数 2 中断配置实 ...
- stm32中断源有哪些_STM32常见问题汇总
1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备2.Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm ...
- stm32中断源有哪些_143条 超详细整理STM32单片机学习笔记(必看)
点击上方蓝色字关注我们~ 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f10x.h相当于reg52.h(里面有基本的 ...
- 杰理之AD14N系列程序获取复位源与唤醒源接口介绍【篇】
复位源: u8 power_reset_source_dump(void) 此接口获取得到复位源以十六进制数表示,十六进制换成二进制数后可根据第几位置1对比上面链接所示信息以得到相应的复位源,继而可以 ...
- 全新STM32 PID温控‘包括‘PID源码‘PCB‘源理图 全新自整定PID温控 STM32温控源码 … 资料参考价值较高,内含PCB+原理图+程序,内容完整。
全新STM32 PID温控'包括'PID源码'PCB'源理图 全新自整定PID温控 STM32温控源码 - 资料参考价值较高,内含PCB+原理图+程序,内容完整. 注:STM32程序使用IAR打开 注 ...
- STM32复位死机(无法启动)
STM32复位死机(无法启动) 嗯,不知道怎么说,stm32的看门狗死机了,下面是仿真时报错信息: The processor has escalated a configurable-priorit ...
- BMP180气压传感器详解与示例(STM32 附带源码)
BMP180气压传感器详解与示例(STM32 附带源码) 简介 工作模式 校准数值 测试流程 第一步:微处理器读取校准数值 第二步:读取温度.气压初始值 第三步:计算温度.气压 第四步:计算海拔高度 ...
- STM32开发 -- 复位类型判断
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/87179586 复位类型的情况有多种,会导致MCU重启. 因此我们有必要确认一 ...
最新文章
- React-状态提升
- 数据集shuffle方法中buffer_size的理解
- redis类型[string 、list 、 set 、sorted set 、hash]
- commons-lang3工具类学习(二)
- 【包邮送书活动】20210924期-开奖通知
- 随想系列_4_从电影《可可西里》说起
- 基于SARIMA-LSTM的门诊量预测研究
- NUC1100 Biorhythms【中国剩余定理】
- 国外优秀免费空间推荐 可用于测试或临时备份
- 苹果在研发屏下 Face ID 和 Touch ID该技术可能最终不会商用
- 自然语言处理之中文文本分析(jieba分词、词袋doc2bow、TFIDF文本挖掘)
- 实验一:Cifar10图像分类竞赛 学习记录
- 3分钟弄明白顶级域名二级域名子域名父域名的区别
- js实现公司年会抽奖活动(亲测可用)
- SMOTE-IPF:通过带滤波的重采样方法解决不平衡分类中的噪声和边界样本问题
- git pull 时每次都要输入用户名和密码的解决办法
- vue项目访问的时候,用localhost能访问,但是用本机ip就不能访问 的解决办法,亲测有效
- 创建父需求子需求构建需求树_用pc构建DIY计算集群(超级计算机)
- iOS12网页视频播放点击全屏按钮会导致闪退
- [2019年]研究生数学建模竞赛