热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

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

“最近项目遇到了一个问题:一个子系统,具有IAP升级的功能,Bootloader位于0x08000000,也就是说系统在运行

0.gif

最近项目遇到了一个问题:一个子系统,具有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种都具有的一个。

0.png

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

源代码实例

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

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

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

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

0.png

各种情况打印结果:

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” 或者扫描下面二维码、关注,在我的底部菜单查看更多精彩内容!

0.jpeg

长按识别二维码 关注


推荐阅读
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 新冠肺炎疫情期间,各大银行积极利用手机银行平台,满足客户在金融与生活多方面的需求。线上服务不仅激活了防疫相关的民生场景,还推动了银行通过互联网思维进行获客、引流与经营。本文探讨了银行在找房、买菜、打卡、教育等领域的创新举措。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
author-avatar
实圪垯电动乐园_855
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有