发新帖我要提问
12
返回列表
打印

115200波特率通信,数据出错

[复制链接]
楼主: ningling_21
手机看帖
扫描二维码
随时随地手机跟帖
21
study1234| | 2013-6-15 13:14 | 只看该作者 回帖奖励 |倒序浏览
看来是没有用示波器了。

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

当然,没有示波器,也可以用原来是好的通讯来作为第三方来比较。
这样可以判断是发那边还是收那边MCU的问题。

使用特权

评论回复
22
ningling_21|  楼主 | 2013-6-15 13:27 | 只看该作者
fp123123 发表于 2013-6-14 21:13
不用485,直接连TTL看看,如果没问题了,就是485的enable/disable时间问题

经实验 ttl 接收数据也有问题。

使用特权

评论回复
23
huangxz| | 2013-6-15 13:35 | 只看该作者
ningling_21 发表于 2013-6-15 13:27
经实验 ttl 接收数据也有问题。

是不是因为stc不支持这么高的波特率啊,如果降一级有没有问题?

使用特权

评论回复
24
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

使用特权

评论回复
评论
ningling_21 2013-7-6 14:28 回复TA
虽然是硬件问题,但给力 
25
ningling_21|  楼主 | 2013-6-15 20:32 | 只看该作者
study1234 发表于 2013-6-15 13:14
看来是没有用示波器了。

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

已经确定,是发送方STC11F04出了问题。

使用特权

评论回复
26
jt4117| | 2013-6-16 08:12 | 只看该作者
众多板子中,有一块不行,那就是板子有问题,要不就是元器件有问题。 没必要纠结在这里。
还有,你这个波特率有没有用到奇偶校验。 如果用了。 那个stc的串口调试工具是有问题的。 我试过。 你改成8bit,1stop,无校验。 再试试通讯  

使用特权

评论回复
27
openmcu001| | 2013-6-16 10:15 | 只看该作者
到底是什么原因啊

使用特权

评论回复
28
Ryanhsiung| | 2013-6-16 18:05 | 只看该作者
1、注意校验位
2、波特率是否偏差较多?

使用特权

评论回复
29
ningling_21|  楼主 | 2013-6-16 20:56 | 只看该作者
Ryanhsiung 发表于 2013-6-16 18:05
1、注意校验位
2、波特率是否偏差较多?

只有8位数据,没有用到校验位。

使用特权

评论回复
30
Ryanhsiung| | 2013-6-16 21:10 | 只看该作者
那可能波特率呢,有用示波器看波形么?

使用特权

评论回复
31
ningling_21|  楼主 | 2013-6-16 21:34 | 只看该作者
Ryanhsiung 发表于 2013-6-16 21:10
那可能波特率呢,有用示波器看波形么?

115200,示波器看看也解决不了问题,估计是某个元件不良导致.

使用特权

评论回复
32
Ryanhsiung| | 2013-6-16 21:39 | 只看该作者
出错时时,有些数据是只第7位变成了1,这看来像是串口的波特率快了一点。
  对了,你是用485,那要注意你控制的RTEN脚位是否控制对了,  RTEN置位要注意延时!!
    若你检测发送缓冲区为空时,就将RTEN 置高,就可能导致波形不全

使用特权

评论回复
33
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;

使用特权

评论回复
34
ningling_21|  楼主 | 2013-6-17 21:14 | 只看该作者
Ryanhsiung 发表于 2013-6-16 21:39
出错时时,有些数据是只第7位变成了1,这看来像是串口的波特率快了一点。
  对了,你是用485,那要注意你控 ...

DE置高后,延时一小段时间才开始发送;
发送完成后,延时一小段时间DE才置低电平。

使用特权

评论回复
35
clarkewayne| | 2013-6-18 11:23 | 只看该作者
學習 學習 !

使用特权

评论回复
36
ningling_21|  楼主 | 2013-6-19 20:48 | 只看该作者
经过抽时间测试,波形没见到什么异常,电脑上数据显示不对,但通信主机却能识别数据的正确性,应该是数据到电脑的过程中出现位差错造成的。

使用特权

评论回复
37
ningling_21|  楼主 | 2013-6-19 20:55 | 只看该作者
huangxz 发表于 2013-6-15 13:35
是不是因为stc不支持这么高的波特率啊,如果降一级有没有问题?

STC肯定支持这么个波特率,这是肯定的...

使用特权

评论回复
38
ningling_21|  楼主 | 2013-7-4 19:19 | 只看该作者
刚开始以为是485电路有问题,走了弯路.
问题终于浮出水面:经过更换STC11F04,数据乱码的现象消失...
把换下的STC芯片换到原来是正常的板子上,数据也变乱码。

使用特权

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

本版积分规则