OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3641|回复: 14

发现stm32的一个重大BUG!!!!

[复制链接]

14

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2017-5-4
在线时间
82 小时
发表于 2018-1-30 17:16:46 | 显示全部楼层 |阅读模式
     今天做项目调试时出现这么个问题,我初始化时禁用了Jtag,只保留SW模式,后面我重映射TIM2的CH1和CH2到PA15和PB3,下载完程序后发现调试不了,退出再次下载发现无法找到CPU,找了半天原因发现芯片已经被锁死,无奈只好把BOOT0接3.3V,重新下载代码成功,然后把BOOT0接回GND,再次下载发现又被锁死。经过一番调试发现只禁用Jtag后面不使用其他重映射功能才正常。但我的PCB已经没法改了,必须重映射TIM2。经过半天调试,发现只有把禁用Jtag的代码放在其他重映射功能之后才能成功。也就是说禁用Jtag后不能再次操作AFIO->MAPR寄存器了,否则锁死芯片。不知道这是不是STM32的一个BUG,还是手册中有明确的说明我没有看到。。。,又或者只有我这一个芯片有这个问题,换个芯片就没事了呢?? 百思不得其解,耽误一天时间!!!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

16

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1919
金钱
1919
注册时间
2016-2-20
在线时间
258 小时
发表于 2018-1-31 08:27:57 | 显示全部楼层
动不动就发现 STM32的BUG
你以为ST的工程师,都是吃干饭啊
回复 支持 1 反对 0

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-30 17:41:29 | 显示全部楼层
想知道你禁用Jtag是用的什么方式。。。。。你该不会是给RDP写了0xCC了吧。。。那是不可更改的永久性写入。是为了防止程序被人恶意拷贝而设置的功能。通常在产品出厂前进行这个操作。。。。。。

这不是给学习板用的,这是给产品用的!!!

你写了之后片子就没有调试功能了,只能用flash里已有的程序进行Flash的改写
TIM截图20180130173825.png

回复 支持 反对

使用道具 举报

14

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2017-5-4
在线时间
82 小时
 楼主| 发表于 2018-1-30 17:44:05 | 显示全部楼层
终于找到原因,自己解答一下吧,stm32手册中是这样描述的 : 1517305025(1).png
这3个位只能写不能读,读他们返回未定义的数值,因此当你禁用了Jtag后,后面在使用重映射功能时,对该寄存器的配置不能采用 “读-修改-写”方式了。
只能整体写入,也就是说不能采用 AFIO->MAPR &= xxxx,或 AFIO->MAPR |= xxxx的模式,只能是 AFIO->MAPR = xxxx


我从watch窗口中读过这3位,读出的始终是0b100 ,把它写回寄存器后就是关闭JTAG-DP,关闭SW-DP。呵呵,ST也是够坑的,说好的未定义的数值,你给个
什么不好,偏给个0b100。
回复 支持 反对

使用道具 举报

14

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2017-5-4
在线时间
82 小时
 楼主| 发表于 2018-1-30 17:45:50 | 显示全部楼层
a496298685 发表于 2018-1-30 17:41
想知道你禁用Jtag是用的什么方式。。。。。你该不会是给RDP写了0xCC了吧。。。那是不可更改的永久性写入。 ...

我没改RDP,只是改AFIO->MAPR寄存器,原因我已经找到了,谢谢!
回复 支持 反对

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-30 17:46:51 | 显示全部楼层
ufo13110008262 发表于 2018-1-30 17:45
我没改RDP,只是改AFIO->MAPR寄存器,原因我已经找到了,谢谢!

说说看呀?
回复 支持 反对

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-1-30 18:08:02 | 显示全部楼层
一惊一乍的
回复 支持 反对

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-30 18:39:47 | 显示全部楼层

哈哈哈哈高级黑
回复 支持 反对

使用道具 举报

14

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2017-5-4
在线时间
82 小时
 楼主| 发表于 2018-1-30 18:42:40 来自手机 | 显示全部楼层
yklstudent 发表于 2018-1-30 18:08
一惊一乍的

哈哈,不咋呼一下你们都不进来啊!
回复 支持 反对

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-30 18:43:41 | 显示全部楼层
ufo13110008262 发表于 2018-1-30 18:42
哈哈,不咋呼一下你们都不进来啊!

不过话说你之前究竟是哪个操作出了问题导致了JTAG调试端口异常呢
回复 支持 反对

使用道具 举报

14

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2017-5-4
在线时间
82 小时
 楼主| 发表于 2018-1-30 18:48:19 来自手机 | 显示全部楼层
a496298685 发表于 2018-1-30 18:43
不过话说你之前究竟是哪个操作出了问题导致了JTAG调试端口异常呢

看我3楼写的
回复 支持 反对

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-30 18:50:23 | 显示全部楼层
ufo13110008262 发表于 2018-1-30 17:44
终于找到原因,自己解答一下吧,stm32手册中是这样描述的 :
这3个位只能写不能读,读他们返回未定义的数 ...

嘿嘿嘿楼主马虎了~~~
回复 支持 反对

使用道具 举报

14

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2017-5-4
在线时间
82 小时
 楼主| 发表于 2018-1-30 18:52:06 来自手机 | 显示全部楼层
a496298685 发表于 2018-1-30 18:50
嘿嘿嘿楼主马虎了~~~

这个真的很难发现!ST给的库也是用的读修改写的方式,出问题的概率非常大!
回复 支持 反对

使用道具 举报

16

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7136
金钱
7136
注册时间
2015-1-23
在线时间
105 小时
发表于 2018-1-31 11:25:57 | 显示全部楼层
__HAL_AFIO_REMAP_SWJ_NOJTAG();   //关闭JTAG-DP,启用SW-DP;  我用的HAL库 操作的
回复 支持 反对

使用道具 举报

6

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2017-12-12
在线时间
47 小时
发表于 2018-2-1 09:11:09 | 显示全部楼层
谢谢楼主分享经验,学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 15:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表