你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Forrest:
单步看一下吧。看看SCI收到的数据是什么数据,程序中写到SCI发送寄存器的又是什么数据。
另外下面例程包中的sci_echoback例程也可以参考。
focus.ti.com.cn/…/sprc832.html
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Leo zhou:
回复 Forrest:
单步调试时,程序写入到SCITXBUF中的数据依次是17、34、51、68、85、102、119、136、153、170、187、204、221、238、255和0,而接收数据SCIRXBUF中的数据依次是221、17、255、51、17、85、51、119、85、153、119、187、153、221、187和255。这个现象是和原因,另外发送数据是使用查询模式,接收使用中断模式。请求帮助,谢谢!
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Forrest:
回复 Leo zhou:
在做loopback实验吗?那可以参考scia_loopback例程。
1、既然单独收发送数据均正常,那说明硬件没有问题
2、既然“发出来的数据和接收到的数据不相同”;那么应该是程序中什么地方写的有问题,您可以单步/断点;看看程序什么地方有问题,是芯片接收到的数据错误导致发送的数据错误;还是接收到的数据正确,但程序没写好导致发送的数据不是您想要发送的数据。
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Young Hu:
Leo
您好!
最大的可能是程序上的问题。您可以看一下到底收到的数据是什么。
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Leo zhou:
回复 Young Hu:
谢谢!
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Johnson Chen1:
回复 Leo zhou:
楼主可以全速跑,将发送和接收到得数据放入RAM中,如连续放8个字节,然后停下来看一下,接收和发送的数据是否一样,如果不一样看接收是否正确。软件上查一些软件上是否因为其它的中断导致接收数据部正确。
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Leo zhou:
SCI通讯测试时,DSP上电后13ms时,用示波器测得SCITX发出一个“Framing Error”,其占据超过发送一帧数据(包括:1位起始位,8位数据位,1位停止位)的时间,然后接下发出来的数据是正确的,但第一组数据的校验和CheckSum有误,以下组的数据和校验和均是正确的,发送的每一组数据间间隔1000ms。每次上电后示波器上都会出现“Framing Error”这现象且只出现一次,请问如何解决?谢谢!
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Johnson Chen1:
回复 Leo zhou:
想知道上电13ms时发的一帧数据,是软件上控制要发数只是发出来的数据不对,还是说这时软件上没有要发数据,是不应该出现的帧?还有就是第一组数的校验和不对,是因为多发了一帧数据,导致实际数据少发了一帧吗?能否详细介绍一些,你的软件流程?方便的话,楼主可以将最小项目附上来,我们实际分析一下。
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Forrest:
回复 Johnson Chen1:
Framing Error产生在SCI发送端发送的数据不符合接收端的要求的数据格式,然后被接收端判定为Framing Error,噪声也是导致Framing Error的一种可能。
楼主上电后,TI的28027的SCI初始化有按照TI例程的初始化步骤么?楼主是怎么确认Framing Error的?28027和其他设备,比如电脑通信电脑也无法正常接收第一帧数据吗?
你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!
Leo zhou:
回复 Johnson Chen1:
上电13ms时发的一帧数据不是软件控制要发的数据,是不应该出现的数据帧!这样需要发的第一组数据的校验和有误,但软件控制发送的数据是正确的,第二组以后的数据和校验和都是正确的。
SCITX:GPIO12
SCIRX:GPIO28
程序如下
1)、SCI初始化
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback // No parity,8 char bits, // async mode, idle-line protocol SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, Disable RX ERR, SLEEP, TXWAKE SciaRegs.SCICTL2.bit.TXINTENA =0; SciaRegs.SCICTL2.bit.RXBKINTENA =1; SciaRegs.SCIHBAUD = 0x00; SciaRegs.SCILBAUD = 0xC2; SciaRegs.SCIFFTX.all=0xC022; SciaRegs.SCIFFRX.all=0x0022; SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
2)、发送模块
main()
{
………………
for(;;)
{ asm("nop"); SCI_Delay(); // 1000ms
for(i=0;i<32;i++) { sdataA[i] = i + 1; }
for(SCI_NUM=0;SCI_NUM<34;SCI_NUM++) // Send Data { SciaRegs.SCITXBUF = sdataA[SendCount]; while(SciaRegs.SCICTL2.bit.TXRDY == 0){}; while(SciaRegs.SCICTL2.bit.TXEMPTY == 0){}; DELAY_US(500); if(SCI_NUM < 32) { CheckSum = CheckSum + sdataA[SendCount]; } else { sdataA[32] = CheckSum & 0x00FF; sdataA[33] = ((CheckSum & 0xFF00) >> 8) & 0x00FF; }
SendCount++;
if(SendCount == 34) { SendCount = 0; CheckSum = 0; } } SCI_SendDelay(); // 100ms
}
}
截取的上电时波形图如附件001.png,请帮忙!谢谢!