STM32复位源判断

发布者:cwk2003最新更新时间:2022-01-04 来源: eefocus关键字:STM32  复位源  STM32F103C8T6 手机看文章 扫描二维码
随时随地手机看文章

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


先看看单片机复位源都有哪些?

在这里插入图片描述

在STM32中文参考手册中可以看到,复位源可以通过状态寄存器来读出。

于是写一段程序来读取复位状态寄存器:


void Check_Rst(void)

{

    printf(" CSR = %xrn", RCC->CSR);

    if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET ) // NRST 引脚复位

    {

        printf("PIN reset rn");

    }

    if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET ) // 上电掉电复位

    {

        printf("POR/PDR reset rn");

    }

    if(RCC_GetFlagStatus(RCC_FLAG_SFTRST) != RESET ) //  软件复位

    {

        printf("Software reset  rn");

    }

    if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET ) // 独立看门狗复位

    {

        printf("Independent watchdog reset rn");

    }

    if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET ) // 窗口看门狗复位

    {

        printf("Window watchdog reset rn");

    }

    if(RCC_GetFlagStatus(RCC_FLAG_LPWRRST) != RESET ) // 低功耗复位

    {

        printf("(Low-power reset rn");

    }

    RCC_ClearFlag(); //清除复位标志

    printf("rn");


}


通过串口将信息打印出来。

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


系统复位实现代码如下:


//系统复位  所有电路都会复位

void mcuSysRestart(void)

{

    __set_FAULTMASK(1); //关闭所有中断

    NVIC_SystemReset();  //系统复位   源码见 core_cm3.h 文件 static __INLINE void NVIC_SystemReset(void) 函数


}


内核复位代码如下:


//内核复位  不会影响外设和其他电路

void mcuCoreRestart(void)

{

    __DSB();

    //置位VECTREST

    SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |

                  (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

                  SCB_AIRCR_VECTRESET_Msk);

    __DSB();

    while(1);

}


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

上电复位:

在这里插入图片描述

按复位键复位:

在这里插入图片描述

独立看门狗复位:

在这里插入图片描述

窗口看门狗复位:

在这里插入图片描述

系统复位:

在这里插入图片描述

内核复位:

在这里插入图片描述

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

在这里插入图片描述

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

关键字:STM32  复位源  STM32F103C8T6 引用地址:STM32复位源判断

上一篇:STM32低功耗模式测试
下一篇:STM32F1xx系列单片机通过程序获取MCU信息

推荐阅读最新更新时间:2024-11-12 15:45

STM32 之 EXTI
按键的硬件结构有一点一定要注意,要在GPIO段上拉电阻,否则GPIO设置成浮空输入后,会造成端口电平不稳定,中断效果不理想。 另外EXTI的映射关系可以看下图,是和管脚号对应的,比较好记 (1)Main C语言: Codee#14817 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台 : ST 官方三合一套件 + 硬件 : STM32F103C8T6 + 开发平台 : IAR For ARM 5.40 + 仿真器 : J-Link + 日期 : 2010-11-4 + 频率
[单片机]
<font color='red'>STM32</font> 之 EXTI
STM32GPIO外部中断总结
1 STM32中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断。 线 16:连接到 PVD
[单片机]
STM32普通定时器实现延时函数
/* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */ #define SYSTICKPERIOD 0.000001 #define SYSTICKFREQUENCY (1/SYSTICKPERIOD) /** * @brief 定时器2的初始化,,定时周期1ms * @param 无 * @retval 无 */ void TIM2_Init(void) { TIM_TimeBaseInitTypeDef TI
[单片机]
基于STM32的逆变电源系统的设计与实现
在电气智能化发展无处不在的今天,无数用电场合离不开逆变电源系统(Inverted Pow er Supply System,IPS)为现场设备提供稳定的高质量电源,特别在如通信机房、服务器工作站、交通枢纽调度中心、医院、电力、工矿企业等对电源保障有苛刻要求的场合。许多IPS产品因遵循传统设计而不符合或落后于现代电源理念,突出表现为控制模块的单一复杂化,控制器芯片落后且控制任务繁重,模拟闭环控制而得不到理想的监控和反馈调节效果,并由此带来单个控制设备软硬件设计上的隐患,这对IPS电源输出造成不利影响,甚至对用电设备因为供电故障而导致灾难性后果。数字化控制技术日趋成熟,而且在某些理念的电源设备控制应用场合得到应用,凸显出模块化、数字化
[单片机]
怎样去设计一种基于STM32单片机的智能手环脉搏心率计步器呢
一:功能 基于STM32单片机智能手环心率计步器体温显示设计 本设计由STM32F103C8T6单片机核心板电路+ADXL345传感器电路+心率传感器电路+温度传感器+lcd1602电路组成。 1、通过重力加速度传感器ADXL345检测人的状态,计算出走步数、走路距离和平均速度。 2、通过心率传感器实时检测心率,通过温度传感器检测温度。 3、lcd1602实时显示步数、距离和平均速度、心率以及温度值。 二:电路图 三:源代码 #include led.h #include delay.h #include sys.h #include usart.h #include #include timer.h #i
[单片机]
怎样去设计一种基于<font color='red'>STM32</font>单片机的智能手环脉搏心率计步器呢
STM32开发 -- CRC校验码
通信协议里有CRC校验码,计算从报文的起始字节到报文内容最后一个字节的crc16的值。 举个例子: 远程控制命令集 5B 20 00 0A 00 01 0A 01 FE 00 01 00 AB 89 CRC校验码为:AB 89 一、RTU 檢查碼(CRC)計算器 第一种: 参看:RTU 檢查碼(CRC)計算器 大小端转换后,CRC检查码为:AB 89 说明,这个计算器还是可以用的。 第二种: 参看:On-line CRC calculation and free library 二、运算规则 RTU检查码(CRC)计算,运算规则如下: 步骤1:令16位暂存器(CRC暂存器)= 0xFFFF。 步骤2:异或第一个8
[单片机]
<font color='red'>STM32</font>开发 -- CRC校验码
stm32以太网LWIP学习笔记之UDP通信
初始化配置步骤 第一:硬件底层DMA缓存以及以太网内存初始化 if(ETH_Mem_Malloc())return 1; //内存申请失败 if(lwip_comm_mem_malloc())return 1; //内存申请失败 u8 ETH_Mem_Malloc(void) { DMARxDscrTab=mymalloc(SRAMIN,ETH_RXBUFNB*sizeof(ETH_DMADESCTypeDef));//申请内存 DMATxDscrTab=mymalloc(SRAMIN,ETH_TXBUFNB*sizeof(ETH_DMADESCTypeDef));//申请内存 Rx_Buff=m
[单片机]
STM32GPIO外部中断总结
简介: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。 1 STM32中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved