115200波特率通信,数据出错

[复制链接]
8833|37
study1234 发表于 2013-6-15 13:14 | 显示全部楼层
看来是没有用示波器了。

如果没有示波器的情况下,楼上有些建议不错。
首先485是半双工的,发送和接收不能同时。那么拿掉485直接改232测试下。
然后乱码或许有啥规律,可以调整波特率看看。例如57600或者更低。看看规律如何。

当然,没有示波器,也可以用原来是好的通讯来作为第三方来比较。
这样可以判断是发那边还是收那边MCU的问题。
 楼主| ningling_21 发表于 2013-6-15 13:27 | 显示全部楼层
fp123123 发表于 2013-6-14 21:13
不用485,直接连TTL看看,如果没问题了,就是485的enable/disable时间问题

经实验 ttl 接收数据也有问题。
huangxz 发表于 2013-6-15 13:35 | 显示全部楼层
ningling_21 发表于 2013-6-15 13:27
经实验 ttl 接收数据也有问题。

是不是因为stc不支持这么高的波特率啊,如果降一级有没有问题?
fp123123 发表于 2013-6-15 14:43 | 显示全部楼层
ningling_21 发表于 2013-6-15 13:27
经实验 ttl 接收数据也有问题。

把1行正确数据和1行错误数据,用8N1格式,1个"0"起始位 + 低位在先的8个数据位 + 1个"1"停止位 的顺序,解码成二进制,可以看出两行之间没有什么对应关系,而且错误数据也不是每次都一样,估计是程序问题/接触不良/干扰这3个原因

正确数据:0100000011011000000100010001010100000001000000000100000000010100100111
错误数据:0011111111011000001100010001110100000011010100101101000000110110101111

评论

虽然是硬件问题,但给力  发表于 2013-7-6 14:28
 楼主| ningling_21 发表于 2013-6-15 20:32 | 显示全部楼层
study1234 发表于 2013-6-15 13:14
看来是没有用示波器了。

如果没有示波器的情况下,楼上有些建议不错。

已经确定,是发送方STC11F04出了问题。
jt4117 发表于 2013-6-16 08:12 | 显示全部楼层
众多板子中,有一块不行,那就是板子有问题,要不就是元器件有问题。 没必要纠结在这里。
还有,你这个波特率有没有用到奇偶校验。 如果用了。 那个stc的串口调试工具是有问题的。 我试过。 你改成8bit,1stop,无校验。 再试试通讯  
openmcu001 发表于 2013-6-16 10:15 | 显示全部楼层
到底是什么原因啊
Ryanhsiung 发表于 2013-6-16 18:05 | 显示全部楼层
1、注意校验位
2、波特率是否偏差较多?
 楼主| ningling_21 发表于 2013-6-16 20:56 | 显示全部楼层
Ryanhsiung 发表于 2013-6-16 18:05
1、注意校验位
2、波特率是否偏差较多?

只有8位数据,没有用到校验位。
Ryanhsiung 发表于 2013-6-16 21:10 | 显示全部楼层
那可能波特率呢,有用示波器看波形么?
 楼主| ningling_21 发表于 2013-6-16 21:34 | 显示全部楼层
Ryanhsiung 发表于 2013-6-16 21:10
那可能波特率呢,有用示波器看波形么?

115200,示波器看看也解决不了问题,估计是某个元件不良导致.
Ryanhsiung 发表于 2013-6-16 21:39 | 显示全部楼层
出错时时,有些数据是只第7位变成了1,这看来像是串口的波特率快了一点。
  对了,你是用485,那要注意你控制的RTEN脚位是否控制对了,  RTEN置位要注意延时!!
    若你检测发送缓冲区为空时,就将RTEN 置高,就可能导致波形不全
 楼主| ningling_21 发表于 2013-6-16 21:57 | 显示全部楼层
这个有延时
        if(len<=0)
        {
                 return;
        }

        DE1 = SEND_DATA_STAT;

        dly=150;
        while(dly--);
        ES0 =0;
        TI0=0;
        while(len--)
        {

                SBUF0 = *ptr++;                
            while(!TI0);                       
                TI0 = 0;
               
        }
        ES0=1;
        dly=100;
        while(dly--);

        DE1 = RECE_DATA_STAT;
 楼主| ningling_21 发表于 2013-6-17 21:14 | 显示全部楼层
Ryanhsiung 发表于 2013-6-16 21:39
出错时时,有些数据是只第7位变成了1,这看来像是串口的波特率快了一点。
  对了,你是用485,那要注意你控 ...

DE置高后,延时一小段时间才开始发送;
发送完成后,延时一小段时间DE才置低电平。
clarkewayne 发表于 2013-6-18 11:23 | 显示全部楼层
學習 學習 !
 楼主| ningling_21 发表于 2013-6-19 20:48 | 显示全部楼层
经过抽时间测试,波形没见到什么异常,电脑上数据显示不对,但通信主机却能识别数据的正确性,应该是数据到电脑的过程中出现位差错造成的。
 楼主| ningling_21 发表于 2013-6-19 20:55 | 显示全部楼层
huangxz 发表于 2013-6-15 13:35
是不是因为stc不支持这么高的波特率啊,如果降一级有没有问题?

STC肯定支持这么个波特率,这是肯定的...
 楼主| ningling_21 发表于 2013-7-4 19:19 | 显示全部楼层
刚开始以为是485电路有问题,走了弯路.
问题终于浮出水面:经过更换STC11F04,数据乱码的现象消失...
把换下的STC芯片换到原来是正常的板子上,数据也变乱码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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