打印
[STM32F1]

在用户代码中读取 DEV_ID 出错

[复制链接]
1288|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
truesix|  楼主 | 2017-5-4 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参照 RM0008 章节 31.6,在地址 0xE0042000 上读取芯片的识别码。发现奇怪的问题:
1、        用JTAG下载固件,下载完毕后自动运行,在main函数开头就读取并打印出来,就可以得到正确值:DEV_ID=414,REV_ID=1003 。之后不管是发命令,还是RESET,都可以读取到正确值。
2、        用JTAG下载固件,下载完毕后自动运行,先打印一些别的设备信息,再读取,就会得到错误值:DEV_ID=307,REV_ID=0000  。之后不管是发命令,还是RESET,读取到的都是这个错误的值。
3、        如果关闭电源,冷启动,就只能读取到0。之后不管是发命令,还是RESET,都只能读取到0。
4、        在不能读取到正确值的情况下,点击Keil编译器上那个调试按键,在线调试,运行一下,就恢复正常了。

好神奇吧?手册上说,其实这个0xE0042000 是一个镜像寄存器。是不是说:如果不使用JTAG下载或调试,JTAG逻辑部分没有正常运作,导致这个镜像寄存器没有正确内容,可否这样理解?可否用别的地址读取到这个ID?
沙发
truesix|  楼主 | 2017-5-4 16:31 | 只看该作者
在QQ群上的一位网友用 F407 测试过,没有这个问题,都能读取到正确值。103 还没有别人测试过。

使用特权

评论回复
板凳
truesix|  楼主 | 2017-5-4 17:39 | 只看该作者
哎,自己顶一下吧。

用点老套的办法:跪求高手指点迷津。

使用特权

评论回复
地板
truesix|  楼主 | 2017-5-5 10:03 | 只看该作者

使用特权

评论回复
5
sonicll| | 2017-5-5 13:56 | 只看该作者
本帖最后由 sonicll 于 2017-5-5 14:07 编辑

我在F103上测试了一下,跟你的结果类似,插着JTAG,能读到值;拔掉JTAG,只要板子不断电,读到的是同样的值;拔掉JTAG断电重启,读到的值全是0。估计就是楼主你理解的那样,JTAG不工作就不能读取正确内容。

使用特权

评论回复
6
truesix|  楼主 | 2017-5-5 14:52 | 只看该作者
sonicll 发表于 2017-5-5 13:56
我在F103上测试了一下,跟你的结果类似,插着JTAG,能读到值;拔掉JTAG,只要板子不断电,读到的是同样的值 ...

非常感谢。

使用特权

评论回复
7
uiint| | 2017-5-5 22:47 | 只看该作者
使用单步调试的数据呢

使用特权

评论回复
8
uiint| | 2017-5-5 22:59 | 只看该作者
这个寄存器都是固化的,应该问题不大吧

使用特权

评论回复
9
truesix|  楼主 | 2017-5-8 09:58 | 只看该作者
uiint 发表于 2017-5-5 22:59
这个寄存器都是固化的,应该问题不大吧

不太像是固化。QQ群有个哥们说可能是内存保护,问他具体是什么保护,他又不说了。再说F1没有MPU啊。

使用特权

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

本版积分规则

3

主题

15

帖子

0

粉丝