打印

关于复位的问题,请香主解释一下

[复制链接]
1852|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
violet520|  楼主 | 2009-3-27 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下3中复位都能复位哪些寄存器
1、使用调试软件的软件复位
2、使用硬件复位按键复位
3、断电后,重新上电

第三种情况的时候,还发现有些寄存器没有复位,实在太可怕了,当时ST的技术支持也来我们公司看了,他也不知道为什么。
沙发
vigia| | 2009-3-27 10:15 | 只看该作者

我来帮你解释一下

1, 使用调试软件的软件复位
:不能复位寄存器和芯片,只能复位PC的值。

2, 使用硬件复位按键复位
:同断电复位

3,断电重新上电
:请问你是怎么发现有些寄存器没有复位的呢?
最大的可能是你断电了,寄存器复位了,然后你又上电调试了,在调试器控制住芯片进入调试模式之前,你的芯片已经运行了部分代码,所以部分寄存器又被初始化了,是不是这样呢?

使用特权

评论回复
板凳
vigia| | 2009-3-27 10:35 | 只看该作者

再多说一句

如果你希望寄存器复位的问题不影响你的调试,方便的做法是:

1, 在初始化函数中操作RCC->APB1RSTR和RCC->APB2RSTR寄存器,复位相关外设。具体可以参考这两个寄存器的说明。

2, 在初始化外设前调用xxx_DeInit()函数,复位外设xxx的寄存器。


使用特权

评论回复
地板
violet520|  楼主 | 2009-3-27 14:41 | 只看该作者

多谢回复

最大的可能是你断电了,寄存器复位了,然后你又上电调试了,在调试器控制住芯片进入调试模式之前,你的芯片已经运行了部分代码,所以部分寄存器又被初始化了,是不是这样呢?

说的挺有道理,但是,为什么重新烧写了程序寄存器的值还是没有复位,以前用其他芯片没有这个问题。

使用特权

评论回复
5
vigia| | 2009-3-27 15:11 | 只看该作者

RX

1, 为什么重新烧写了程序,寄存器的值还是没有复位?
因为烧写程序的过程是在RAM里运行一段烧写flash的代码,这个过程并不牵涉到各个外设,当然也不会帮你复位外设寄存器。


2, 以前用其他芯片没有这个问题
请问以前用的其他芯片是cortex-M3内核吗?不一样的芯片内核使用的调试烧录原理并不一样,可能有些芯片在调试时需要一上电就完全占领芯片控制权的,也有可能有些芯片在开始调试时必须有对硬件的复位操作,总之不一样的内核,原理不一样,表现当然不一样了。

3楼我说的是调试时解决复位问题的最好办法,试一下吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

123

帖子

1

粉丝