0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32复位来源(寄存器版)

黄工的嵌入式威廉希尔官方网站 圈 来源:黄工的嵌入式威廉希尔官方网站 圈 2020-03-14 14:13 次阅读

最近项目遇到了一个问题:一个子系统,具有IAP升级的功能,Bootloader位于0x08000000,也就是说系统在运行过程允许复位。但是,该子系统需要在上电的过程中处理某项任务(而且只需要上电的那一次)。

问题来了:我们如何判断系统是第一次上电复位?

解决的办法有很多种,但是最简单的办法就是获取系统复位来源,详情请看文章。

其实,这篇文章的内容也能回答之前一位网友的问题,不知你会不会阅读本文。

RCC复位和时钟控制

RCC:Reset and Clock Control

相信大家都知道RCC是什么,主要就是讲述复位和时钟的章节。先来讲述一下复位种类。

STM32的复位大概分为三类:系统复位、电源复位和后备域复位。

系统复位:

1. NRST引脚上的低电平(外部复位)

2. 窗口看门狗计数终止(WWDG复位)

3. 独立看门狗计数终止(IWDG复位)

4. 软件复位(SW复位)

5. 低功耗管理复位

电源复位:

1. 上电/掉电复位(POR/PDR复位)

2. 从待机模式中返回

备份区域复位:

1. 软件复位,备份区域复位可由设置备份域控制寄存器(RCC_BDCR)中的BDRST位产生。

2. 在VDD和VBAT两者掉电的前提下, VDD或VBAT上电将引发备份区域复位。

RCC_CSR

CSR:Control/Status Register,即控制/状态寄存器

在STM32种,RCC的寄存器和功能因芯片的不同而不同,但RCC_CSR寄存器是众多STM32种都具有的一个。

这个寄存器就会记录各种复位的状态,我们只需要读取这个寄存器即可知道是什么样子引起的复位。

源代码实例

上面说了那么多,其实大家都容易理解,但只有真正实测过源代码,才能真正起到掌握的作用。

为了方便某些懒惰的朋友,我将提供测试源代码,方便大家学习和掌握。

本文源代码给予前面文章【CM3内核复位与系统复位区别及应用】提供的源代码的基础上修改而来。

现在主要看下测试源代码和测试效果:

各种情况打印结果:

1.上电复位打印信息

CSR = C000000

5.POR/PDR reset

6.PIN reset

Demo...

Demo...

2.按键(PIN)复位打印信息

CSR = 4000000

6.PIN reset

Demo...

Demo...

3.内核复位 NVIC_CoreReset();打印信息

CSR = 0

Demo...

Demo...

4.系统复位 NVIC_SysReset();打印信息

CSR = 14000000

4.Software reset

6.PIN reset

Demo...

Demo...

到了这一步,相信大家基本明白了。但是,还有值得进一步分析的地方,这里我算是给大家安排的作业(只有愿意动脑思考的人,才会有进步)。

为了方便大家学习,我将源代码提供给大家下载(虽只有STM32F1,但其他系列类似)。

STM32F103ZE(Keil)_复位来源(寄存器版):

http://pan.baidu.com/s/1hskScba

推荐阅读:

CM3(STM32)内核复位与系统复位区别及应用

有一种修饰符能使变量在处理器复位而不被初始化

最后

微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,在我的底部菜单查看更多精彩内容!

长按识别二维码 关注

原文标题:一篇很简单,有必要了解的文章 - STM32复位来源(寄存器版)

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5343

    浏览量

    120373
  • STM32
    +关注

    关注

    2270

    文章

    10900

    浏览量

    356041
  • IAP
    IAP
    +关注

    关注

    2

    文章

    163

    浏览量

    24290
收藏 人收藏

    评论

    相关推荐

    ADS9234R复位寄存器如何配置?

    请问一下,我用MCU正常配置这款芯片,我是先用复位引脚通过MCU输出低电平拉低进行复位,还是先掉电后上电,再配置寄存器呢?还有一个问题就是,我写入寄存器,每写入一个命令是否会有什么数
    发表于 11-14 06:59

    瀚海微SD NAND之SD 协议(38)寄存器&复位&开解锁

    块,以16位CRC为后缀。CSD命令的数据超时不能设置为卡的TAAC,因为该值存储在卡的CSD中。 因此,CSD寄存器的读延迟使用标准响应超时值(NcR)。 复位顺序 SD存储卡需要一个定义好的复位顺序。 上电
    的头像 发表于 10-10 09:28 310次阅读

    寄存器间接寻址和寄存器寻址的区别

    寄存器间接寻址和寄存器寻址是计算机体系结构中两种重要的寻址方式,它们在指令执行过程中起着关键作用。下面将从定义、原理、特点、应用场景以及区别等方面对这两种寻址方式进行详细阐述。
    的头像 发表于 10-05 17:13 1473次阅读

    寄存器的类型和作用

    在计算机科学中,寄存器(Register)是一种高速存储单元,它位于CPU内部,与CPU的运算单元和逻辑控制单元紧密相连。寄存器的主要作用是暂时存储指令、操作数和地址等临时数据,以便CPU快速访问和处理。由于寄存器直接集成在CP
    的头像 发表于 09-05 14:11 1793次阅读

    寄存器故障分析

    寄存器故障分析是计算机硬件维护与系统稳定性保障中的重要环节。寄存器作为计算机中的关键组成部分,负责存储和传输数据,其稳定性和可靠性直接影响到整个计算机系统的性能。以下是对寄存器故障的全面分析,包括故障类型、故障现象、故障原因及诊
    的头像 发表于 08-29 11:26 1014次阅读

    寄存器是什么意思?寄存器是如何构成的?

    在计算机科学中,寄存器(Register)是一个高速存储单元,它位于中央处理(CPU)内部,用于存储计算机程序执行过程中所需要的数据、指令地址或状态信息。寄存器是计算机体系结构中至关重要的组成部分,对计算机的运算速度和性能有着
    的头像 发表于 08-02 18:23 4158次阅读
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何构成的?

    寄存器寻址和直接寻址的区别

    寄存器寻址和直接寻址是计算机指令系统中的两种基本寻址方式。它们在指令的执行过程中起着至关重要的作用,决定了指令操作数的来源和目标。下面我们将介绍这两种寻址方式的特点、区别以及在实际应用中的优缺点
    的头像 发表于 07-12 10:42 1795次阅读

    寄存器寻址的实现方式

    在计算机体系结构中,寄存器寻址是一种常见的寻址方式,它允许程序直接访问CPU内部的寄存器寄存器寻址可以提高程序的执行效率,因为它避免了对内存的访问。 寄存器寻址的基本概念
    的头像 发表于 07-12 10:36 664次阅读

    寄存器分为基本寄存器和什么两种

    寄存器是计算机中用于存储数据的高速存储单元,它们是CPU内部的重要组成部分。寄存器可以分为基本寄存器和扩展寄存器两种类型。 一、基本寄存器
    的头像 发表于 07-12 10:31 1375次阅读

    移位寄存器右移是怎么移位的

    移位寄存器是一种在数字电路和计算机科学中广泛使用的存储设备,它可以用来存储和传输数据。在移位寄存器中,数据可以通过移位操作来实现数据的传输和处理。移位寄存器的移位操作有两种基本形式:左移和右移。本文
    的头像 发表于 07-12 10:14 1457次阅读

    干货满满:ARM的内核寄存器讲解

    内核寄存器与外设寄存器: 内核寄存器与外设寄存器是完全不同的概念。内核寄存器是指 CPU 内部的寄存器
    发表于 04-17 11:47 3691次阅读
    干货满满:ARM的内核<b class='flag-5'>寄存器</b>讲解

    STM32G0B1 hal有没有复位所有寄存器的函数或者demo?

    本人用的STM32G0B1,我想boot跳转后,先清理寄存器.hal有没有复位所有寄存器的函数或者demo?
    发表于 03-08 07:31

    CPU的6个主要寄存器

    CPU寄存器是中央处理内的组成部分,是有限存贮容量的高速存贮部件。寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制
    的头像 发表于 02-03 15:15 4316次阅读

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器是一种用于在数字电路中实现数据移位操作的基本电路元件。它由多个触发以及相关控制电路组成,具有存储、接受和移动数据的功能。移位寄存器可以分为两种类型:串行移位寄存器和并行移位
    的头像 发表于 01-18 10:52 8643次阅读

    个人对STM32 SysTick的总结(寄存器操作)

    一、概述:SysTick是一个简单的递减24位计数。如果你不需要再应用程序中嵌入操作系统,SysTick可以作为简单的延时和产生周期性的中断。状态控制寄存器的第0位可以使能计数,当前值寄存
    的头像 发表于 01-06 08:00 1894次阅读
    个人对<b class='flag-5'>STM32</b> SysTick的总结(<b class='flag-5'>寄存器</b>操作)