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】欢迎添加关注!文章转载请注明出处。

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

    关注

    30

    文章

    5025

    浏览量

    117697
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348687
  • IAP
    IAP
    +关注

    关注

    2

    文章

    161

    浏览量

    23960
收藏 人收藏

    评论

    相关推荐

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

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

    TLE9854的软件复位是哪个寄存器

    英飞凌tle9854的软件复位是哪个寄存器
    发表于 02-02 07:20

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

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

    请问ADE9078用户电能寄存器在掉电以后会复位吗?

    ADE9078在计算电能的时候,通过内部电能寄存器累加到用户电能寄存器中,如果设置内部电能寄存器累加时间为10S,当累加时间当达到3S时,ADE9078掉电,请问再次上电以后内部电能寄存器
    发表于 12-26 06:34

    AD7173-8通道寄存器读写正常,配置寄存器和滤波寄存器不能写入(读出为复位值)是什么问题?

    AD7173-8通道寄存器读写正常,配置寄存器和滤波寄存器不能写入(读出为复位值),是什么问题?
    发表于 12-01 07:49

    CPSR寄存器和APSR寄存器的组成

    程序状态寄存器的作用就是反映处理器的状态信息。在程序运行期间我们可以通过查看程序状态寄存器的状态位来进行程序的分支跳转处理,或者我们可以设置程序状态寄存器的模式位来改变处理器的运行模式,或者我们可以设置程序状态
    的头像 发表于 10-20 11:38 1765次阅读
    CPSR<b class='flag-5'>寄存器</b>和APSR<b class='flag-5'>寄存器</b>的组成

    STM32 CAN接收/发送错误寄存器如何清零?

    STM32 CAN接收/发送错误寄存器如何清零?  CAN总线是一种常用的串行总线,其具有高可靠性、高速率、容错能力强等特点,广泛应用于汽车电子、制造业自动化、工程控制等领域。在CAN总线的标准
    的头像 发表于 09-14 14:22 2758次阅读

    STM32L4复位和时钟控制(RCC)介绍

    系统复位 •重置除某些RCC寄存器、PWR寄存器和备份域 •来源 •NRST引脚上的低电平(外部复位) •WWDG活动 •IWDG活动 •防
    发表于 09-12 06:05

    stm32复位 内核复位和系统复位

    内核复位:它会使STM32内核(Cortex-M)进行复位,而不会影响其外设,如GPIO、TIM、USART、SPI等这些寄存器复位
    的头像 发表于 08-01 17:21 3301次阅读

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。
    的头像 发表于 07-21 16:59 2957次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么操作<b class='flag-5'>寄存器</b>点亮LED灯?

    寄存器是什么 掌握使用寄存器做设计需要注意的事项

    既然RTL是以寄存器行为为基础,那么就必须先了解寄存器是什么,并且掌握使用寄存器做设计需要注意的事项。
    的头像 发表于 07-13 15:38 859次阅读
    <b class='flag-5'>寄存器</b>是什么 掌握使用<b class='flag-5'>寄存器</b>做设计需要注意的事项

    STM32三种复位形式

    低功耗管理复位 可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源
    的头像 发表于 06-22 09:05 8743次阅读
    <b class='flag-5'>STM32</b>三种<b class='flag-5'>复位</b>形式

    如何用外设复位修改只读寄存器

    STM32开发者用到STM32F429芯片开发产品,并用到其中的CAN外设。在CAN应用过程中有个专门针对收发出错情况进行次数统计的两个计数器,其值通过错误状态寄存器CAN_ESR中的REC
    的头像 发表于 06-21 16:11 394次阅读
    如何用外设<b class='flag-5'>复位</b>修改只读<b class='flag-5'>寄存器</b>

    修改寄存器默认值有几种方法?

    寄存器默认值,也叫复位值,是当reset或者set有效时寄存器输出的值。对于一个DFF来说,如下图,当reset为0时,Q输出0;当set为0时,Q输出为1(外部使用时保证reset与set不同时为0)。
    的头像 发表于 05-05 14:28 1684次阅读
    修改<b class='flag-5'>寄存器</b>默认值有几种方法?

    巧用外设复位修改只读寄存器

    STM32开发者用到STM32F429芯片开发产品,并用到其中的CAN外设。在CAN应用过程中有个专门针对收发出错情况进行次数统计的两个计数器,其值通过错误状态寄存器CAN_ESR中的REC[7:0]和TEC[7:0]两个字段
    的头像 发表于 04-28 13:59 485次阅读
    巧用外设<b class='flag-5'>复位</b>修改只读<b class='flag-5'>寄存器</b>