OpenEdv-开源电子网

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

金币不多,只有这么些,现在又遇到真正诡异的事不知是软件还是硬件。请大神指点

[复制链接]

4

主题

14

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2014-8-30
在线时间
4 小时
发表于 2016-8-30 13:43:25 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 mcwolf 于 2016-8-30 18:51 编辑

我用stm32读取几个陀螺仪,现在遇到这种诡异情况,程序一直运行正,但突然会出现随机一个陀螺仪读数一直为0或者一直为其他读数。更换陀螺仪,转移管脚均无法解决。后来重刷原程序后重启还是会一直读数为固定数值。也就是只要一旦出现故障后,重启以及重刷程序都无法解决。同时换陀螺仪、换管脚也无效,情况随机无法预测。最诡异的在这里,我如果在原程序中任意位置添加一条向串口输出数据的语句printf(...),读数会马上正常。而且读数正常后,我把那条printf(....)语句去掉,再烧回去程序仍然正常读数,会正常运行,直到下一次随机再出现故障。我现在只能采用加printf(...)语句后烧写让它正常再,去掉烧回去的方法解决。不知没有没遇到同样情况的,能指点小弟一二,故障的真正原因在哪里。注明,我的stm32 型号是 stm32103fzet6
经我多次测试发现是这样,不是加printf()就好,而是只要加入任意代码程序都会正常,但修改参数不行。比如我修改时序的延时函数其参数扩大10倍都没用,但是只要加入一段代码比如 n++;这种极其简单的, 再烧入,就可以正常读取。但是发生故障后如果不加语句,原程序无论如何重烧都不行。而只要正常读取后把加入的语句删掉还是会正常。

最佳答案

查看完整内容[请看2#楼]

我觉得一般出现这种情况 都是 时序 的问题 陀螺仪的时序 处于一个临界状态 导致的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1814
金钱
1814
注册时间
2011-10-9
在线时间
230 小时
发表于 2016-8-30 13:43:26 | 显示全部楼层
我觉得一般出现这种情况 都是 时序  的问题    陀螺仪的时序 处于一个临界状态   导致的
回复

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
186
金钱
186
注册时间
2016-1-3
在线时间
62 小时
发表于 2016-8-30 14:12:18 | 显示全部楼层
你把他的printf重定向到串口屏蔽了,只用串口发送试试数据试试,或者用仿真器直接看读出的数据。
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2014-8-30
在线时间
4 小时
 楼主| 发表于 2016-8-30 14:19:37 | 显示全部楼层
谢谢回复,我比较纠结于出了故障怎么原程序怎么烧写都没用。如果加了printf就马上正常,关键是去掉printf后再烧回去仍然正常。也就是前后程序完全一样,只是中间有个加printf烧写,再去掉printf再烧写的这一个过程。我会照你的指点试一试,但是这个故障是随机的,我也不知什么时候出现,所以很不好调试。
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-8-30 14:35:00 | 显示全部楼层
我在103上遇到过比较诡异的,在101上跑的好好的ADC+DMA,在103上随机出现通道串位,目前找不到解决办法,只有屏蔽掉DMA功能。
   你这个建议用KEIL+JLINK在线仿真一直挂着,出故障时看一看各寄存器的值有没有什么异常。
活到老,学到老。
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-8-30 17:47:42 | 显示全部楼层
诡异的事情太多了。
您试一下,在printf前后各加一个delay。先不要在意数据能不能发送完,看看添上delay会不会好使。我是指你正常输出时用的printf,而不是你文中说的那个额外的printf
自在随心
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2014-8-30
在线时间
4 小时
 楼主| 发表于 2016-8-30 18:53:20 | 显示全部楼层
simms01 发表于 2016-8-30 15:13
我觉得一般出现这种情况 都是 时序  的问题    陀螺仪的时序 处于一个临界状态   导致的

谢谢修改时序的延时还是不行,必段加语句后再删除,才能正常。
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2014-8-30
在线时间
4 小时
 楼主| 发表于 2016-8-30 18:54:45 | 显示全部楼层
yuzeyuan1 发表于 2016-8-30 17:47
诡异的事情太多了。
您试一下,在printf前后各加一个delay。先不要在意数据能不能发送完,看看添上delay会 ...

现在肯定不是加printf()了,是加任意语句都可以恢复正常读取,但是把加入的语句删掉后再烧入,还是可以继续正常读取,都快疯掉了。谢谢你的回复
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2016-8-30 21:45:24 | 显示全部楼层
试过全部断电再重开机吗?
加了代码的,试试完全断电再重起,没加代码的也断电重起一下试试。
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2014-8-30
在线时间
4 小时
 楼主| 发表于 2016-9-7 14:11:24 | 显示全部楼层
再顶一下,有没有大师能帮我解答一下。
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2775
金钱
2775
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-9-7 14:26:48 | 显示全部楼层
mcwolf 发表于 2016-9-7 14:11
再顶一下,有没有大师能帮我解答一下。

代码不多的话,建议把代码发上来给大家看看。
你连陀螺仪的线有多长?多个陀螺仪好奇你是怎么把数据通过串口采全的,能不能拍一下硬件照。
自在随心
回复

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2246
金钱
2246
注册时间
2010-12-16
在线时间
202 小时
发表于 2016-9-7 16:36:35 | 显示全部楼层
检查初始化时序 , 是否有一些必要的延时意外加入了后 , 后面的操作就正常了 .
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 19:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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