[应用相关] 用STM32的串口做压力测试居然导致CPU复位

[复制链接]
6168|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个错误位么?我只是打开了串口中断,在中断里读取错误标志,如果有置位的就清除,其它没有任何处理。这样处理叫不当?
还有其它的高招?
香水城 发表于 2009-4-24 18:25 | 显示全部楼层

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

STM32中有多个复位标志。

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

我能够想到的就是程序处理不当,因为没有看到你的现场,我无法判断是什么原因引起的错误,这需要你在调试中找出来。
 楼主| tsx1983 发表于 2009-4-24 18:45 | 显示全部楼层

这个方法可以试试

香主的这个方法可以考虑试试。
现在就是还有点麻烦,就是并不是每次都会复位,只是偶尔有这种现象,等到我仿真的时候它又死活不出来,晕死了
 楼主| tsx1983 发表于 2009-4-25 10:59 | 显示全部楼层

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

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

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

而且我发这个贴也不是为了说明STM32的串口有问题,而是为了找出这个问题的原因。
pb486 发表于 2009-4-26 14:15 | 显示全部楼层

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

haulm 发表于 2013-5-8 07:49 | 显示全部楼层
楼主,请教你用什么工具或方法进行串口的压力测试?多谢
gdq19860218 发表于 2014-5-29 11:40 | 显示全部楼层
楼主,你这个问题最后怎么解决的,,能说下嘛?
ar3000a 发表于 2014-5-29 19:43 来自手机 | 显示全部楼层
八成是某些下标溢出之类。开发stm32都有jlink之类的工具,做测试的时候看看现场。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

160

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部