历史上的今天
今天是:2025年01月28日(星期二)
2021年01月28日 | 一篇很简单,有必要了解的文章 - STM32复位来源(寄存器版)
2021-01-28 来源:eefocus
最近项目遇到了一个问题:一个子系统,具有IAP升级的功能,Bootloader位于0x08000000,也就是说系统在运行过程允许复位。但是,该子系统需要在上电的过程中处理某项任务(而且只需要上电的那一次)。
问题来了:我们如何判断系统是第一次上电复位?
解决的办法有很多种,但是最简单的办法就是获取系统复位来源,详情请看文章。
其实,这篇文章的内容也能回答之前一位网友的问题,不知你会不会阅读本文。
Ⅰ
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上电将引发备份区域复位。
Ⅱ
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
史海拾趣
|
改进的缓冲区管理模块的作用在于加强VxWorks实时操作系统对内存的管理,并为上层应用程序提供所需内存申请和释放工作。因此改进模块位于VxWorks实时操作系统模块和应用程序模块之间。 CPU实际物理内存在bootRoom启动 ...… 查看全部问答> |
|
我用的是MSP430F149的单片机,我想通过软件编程实现系统时钟的调用,也就是想在软件中调用系统时钟,请问我要怎么编程呢,谢谢!… 查看全部问答> |
|
cyclone系列的FPGA内核和IO口消耗电流多大,内核电压为1.2V,IO电压为3.3V,分别消耗电流多大,现在画PCB,需要确定线路粗细。 谢谢啊,… 查看全部问答> |
|
现在很多手机上,不仅有数字时钟,还有指针式时钟作为装饰,比如右面这张图,如果自己动手做一个的话,岂不是很好玩。 指针式时钟,我以前动手做了一个,不过,那时候用LCD12864做的,由于LC12864的分辨率问题,实际效果还 ...… 查看全部问答> |
|
作者 Wayne Xu TI Design 上线以来很受工程师的欢迎。TI的产品线应用工程师,也设计出几款经典的电流源电路,最小是5uA,最大2A。每一个方案都给出了完整的原理图,仿真文件,PCB layout以及测试结果。 接下来对这几个方案一一做一下简单介绍,并 ...… 查看全部问答> |




