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

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

长按识别二维码 关注

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongerHuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值