Cojumos 发表于 2012-5-27 15:39:53

串口通信速度过快导致单片机重启??

SOS!!!!!用RS485串口通信,PC接上51。设置串口助手的自动发送周期为10ms,PC发送一串数据单片机返回一串应答码??

单片机运行不到0.5s便重启?????

程序开始运行时设置了开始声响,LED灯由暗变亮~~~~死机后,程序竟跳到main开始!!??

是不是单片机在发送,而串口助手也在发送,导致数据出错,而影响到单片机???

lovelywwei 发表于 2012-5-27 16:37:56

无图无程序无真相。485是半双工,你可以根据波特率计算传输你所要的字节数要多少时间。如果你只能单缓冲区并且发送周期很短,很可能缓冲区溢出,然后就。。。

niba 发表于 2012-5-27 17:17:18

内存溢出????????

Cojumos 发表于 2012-5-27 19:25:45

怎么会溢出呢!!???

beijingqiang 发表于 2012-5-27 20:23:21

建议你先试一下测试程序,看看10ms发一次数会不会出现你说的问题

Cojumos 发表于 2012-5-30 16:20:05

后来如果把单片机的波特率加到115200就不会出现类似的问题,但是如果波特率是在19200,或者其他的,只要串口发送的速率过快,单片机就会死机了

goooogleman 发表于 2012-5-30 23:14:23

那是溢出了。。。。

Cojumos 发表于 2012-5-31 16:05:43

溢出了?……那是在那里溢出了呢???

Cojumos 发表于 2012-5-31 16:11:02

换了其他的51型号也是如此。计算过之后,单片机发送回来的数据有23个字节,波特率是19200,单片机发回来大概需要9.5ms,串口发送19个字节,需要8.0毫秒,加起来大概需要18ms。而串口利用自动发送,发送周期需要大于等于18ms,单片机才不会死机,重启。否则,小于18ms的就会死机,重启。

这是溢出问题吗???或者是其他原因???

Cojumos 发表于 2012-6-1 16:39:51

在发送时,对REN清零就可以避免死机。就是说,问题出现在收发同时出现的情况???

wye11083 发表于 2012-6-1 17:23:31

这种情况很诡异噢。表示不知道。是不是你的狗没关,导致你的片子没有时间喂狗?一般来说缓冲溢出不会死机吧(至少单片机的FIFO都是独立出来的),顶多是漏掉一部分。

yiyu 发表于 2012-6-1 17:32:34

缓冲区溢出,很时髦的哦,51就那一二百字节,直接把堆栈爆掉,然后么,就一直nop,nop,nop或mov r7,0xff到pc溢出,

mangocity 发表于 2012-6-1 18:46:02

呵呵,缓冲区溢出这种事情 100% 是代码编写错误。

yiyu 发表于 2012-6-1 19:19:45

本帖最后由 yiyu 于 2012-6-1 19:24 编辑

Cojumos 发表于 2012-6-1 16:39 static/image/common/back.gif
在发送时,对REN清零就可以避免死机。就是说,问题出现在收发同时出现的情况??? ...

485你的txd和rxd同时接一起了吧, 在发送的时候不关闭接收,你对rxbuf又没有保护, 建议接收处理这个样子
c = sbuf;
if( rxcnt < sizeof(rxbuf) )
   rxbuf = c;

Cojumos 发表于 2012-6-2 08:59:14

yiyu 发表于 2012-6-1 19:19 static/image/common/back.gif
485你的txd和rxd同时接一起了吧, 在发送的时候不关闭接收,你对rxbuf又没有保护, 建议接收处理这个样子 ...

485的TXD,RXD怎么能接一起呢???附上电路图。

这里应该也作保护了吧!
void Receive_Data(uchar Data)
{
if(Rec_Count>=REC_BUF_LENGTH-2) Rec_Count=0;

else
Rec_Buf=Data;

……
}



其实如果是溢出的问题,缓冲又是如何发生溢出的呢?

求解释

Cojumos 发表于 2012-6-2 09:01:10

yiyu 发表于 2012-6-1 17:32 static/image/common/back.gif
缓冲区溢出,很时髦的哦,51就那一二百字节,直接把堆栈爆掉,然后么,就一直nop,nop,nop或mov r7,0xff到p ...

缓冲区溢出~~????

SBUF溢出吗????

Cojumos 发表于 2012-6-2 09:02:08

mangocity 发表于 2012-6-1 18:46 static/image/common/back.gif
呵呵,缓冲区溢出这种事情 100% 是代码编写错误。

那请问是不是在发送或者接收,接收处理的时候代码出错了呢

ilikemcu 发表于 2012-6-2 09:48:42

一个破51,怎么会产生RAM溢出?难道接收时存放到RAM区,不做溢出判断?我做过9600bps无停顿通信,连续测试2周多,不关机,一点事儿都没有。

RI = 0;

rec_ buf = SBUF;
rec_buf_point++;
rec_buf_point %= REC_BUF_LONG; // 加了这个限制,发到51报废都不会造成重启啊

Cojumos 发表于 2012-6-2 14:45:29

按楼上的方法试过了,发现并不是这个问题
页: [1]
查看完整版本: 串口通信速度过快导致单片机重启??