打印
[应用相关]

用STM32的串口做压力测试居然导致CPU复位

[复制链接]
4855|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tsx1983|  楼主 | 2009-4-24 13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
去年末我第一次用STM32做了一款产品,最近完工,做测试。
就是平时我的M32往底下的设备发送命令,然后接收一定数量的数据。
刚开始的时候串口接收一段时间就再也接收不到数据了。采用的是DMA接收和发送.后来查出来是错误标志位未清除引起的,我就打开串口中断只要一有错误位就立刻清除。程序就正常起来了。每次都能正确接收,也没有出现运行一段时间就收不着的现象。
最近用调试软件对着串口不间断的发送数据,发现有时候CPU居然会复位,我就纳闷了。有时候不复位,不复位的情况下我又重新恢复正常,CPU有时候还能收到数据,有时候还是收不到数据了。有时候要过很长一段时间才能再次收到数据。
香主帮忙诊断一下?
沙发
tsx1983|  楼主 | 2009-4-24 13:23 | 只看该作者

补充一下

我心想,即使我发的数据不是CPU想要的,顶多就是丢弃这一次数据而已,程序里也是这样处理的。也不至于导致复位吧?而且每次接收DMA都设定了接收多少个字节,再多发送也不可能进去了。
还有我已经在中断里打开了错误标志位清除,想不明白为什么还能出现接收不到的情况,发送一直都正常,没有太大的问题

使用特权

评论回复
板凳
香水城| | 2009-4-24 14:02 | 只看该作者

出现错误位就表示需要软件介入,查看错误原因并清除

你这样简单地清除掉错误标志位,而没有查清楚出错的原因,本身就埋下了隐患。

至于CPU复位,肯定是由于程序没有很好地处理错误的情况,导致程序运行错误而造成的。

使用特权

评论回复
地板
tsx1983|  楼主 | 2009-4-24 18:13 | 只看该作者

香主可能没明白我的意思

既然我清除错误标志位,我当然知道是什么原因了。而且我是特意要给他乱发数据,看他能不能经受住考验。
我想要的结果是即使一段时间总线上出现乱数据,等恢复正常了还是能够照常运行。但这个目标似乎有点难。有时候行有时候不行。

还有复位的事情,香主不知道为什么这么肯定是程序的错误处理不当呢?
串口接收不就那4个错误位么?我只是打开了串口中断,在中断里读取错误标志,如果有置位的就清除,其它没有任何处理。这样处理叫不当?
还有其它的高招?

使用特权

评论回复
5
香水城| | 2009-4-24 18:25 | 只看该作者

既然这样你可以在复位后检查一下是什么原因引起的复位

STM32中有多个复位标志。

一个可行的检查办法是在复位后的第一条指令处放一个断点,当产生复位停在这个断点后,检查复位标志,检查内存的一些变量,检查堆栈等内容,这时RAM中的内容就是复位前的状态。

我能够想到的就是程序处理不当,因为没有看到你的现场,我无法判断是什么原因引起的错误,这需要你在调试中找出来。

使用特权

评论回复
6
tsx1983|  楼主 | 2009-4-24 18:45 | 只看该作者

这个方法可以试试

香主的这个方法可以考虑试试。
现在就是还有点麻烦,就是并不是每次都会复位,只是偶尔有这种现象,等到我仿真的时候它又死活不出来,晕死了

使用特权

评论回复
7
tsx1983|  楼主 | 2009-4-25 10:59 | 只看该作者

楼上的你有没有试过DMA接收和发送

楼上的你有没有试过串口用DMA接收和发送。然后在数据总线上乱发数据试试?

我这个程序正常情况下确实一点问题都没有。我考虑的是异常情况下串口还能不能恢复正常。如果就此挂掉那就说不过去了。

而且我发这个贴也不是为了说明STM32的串口有问题,而是为了找出这个问题的原因。

使用特权

评论回复
8
pb486| | 2009-4-26 14:15 | 只看该作者

软件问题可能性大一些,写个稳定的程序不容易

使用特权

评论回复
9
haulm| | 2013-5-8 07:49 | 只看该作者
楼主,请教你用什么工具或方法进行串口的压力测试?多谢

使用特权

评论回复
10
gdq19860218| | 2014-5-29 11:40 | 只看该作者
楼主,你这个问题最后怎么解决的,,能说下嘛?

使用特权

评论回复
11
ar3000a| | 2014-5-29 19:43 | 只看该作者
八成是某些下标溢出之类。开发stm32都有jlink之类的工具,做测试的时候看看现场。

使用特权

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

本版积分规则

25

主题

160

帖子

0

粉丝