首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教:SMAC中无线串口例子的数据收发问题!

请教:SMAC中无线串口例子的数据收发问题!

最近在做smac的无线串口的数据收发,smac给的无线串口的例子一次只能收发一个字节的数据,我想把它改为没有限制的收发,现在是能收发多个字节的数据了,但是接收到的数据和我发送的不一样,跟踪调试发现:在发数据时,发送端从串口buffer读到的数据就不对,一直没有找到问题在哪,很是困惑,有谁知道的话,指教一下,谢谢!

你是多长的数据?因为如果数据太长的话,底层是不支持的。需要分包发送的。
很短的数据,例如:hello,就会先收到一个h,再发时就又收到elloh,以后发hello时都是收到elloh。另外发送helloworld时,它就会收到错误的,如:ellow、ldh等,实在是找不到问题在哪?
我试了一下不从串口读数据,直接写数据到发送数据包,接收到的就是正确的,所以判断是串口读数据或者向将数据存到buffer里时的问题。
底层支持多长的数据啊?
物理层支持最大的是125Byte.我想你应该检查一下你的串口程序,smac给的无线串口的例子的串口程序,是不可以的,你需要修改的。
我将SCI.c的Vscirx中从串口收数据的代码改为:
if(pPos < 128)
{
gu8SCIData[pPos] = SCID; /* load SCI register to data */
gu8SCIData[pPos + 1] = 0;
pPos++;
gu8SCIDataFlag = 1;
}
将wireless_uart.c中 case TRANSMIT_DATA下的copy gu8SCIData中的数据到 gau8TxDataBuffer的代码改为:
if(pPos > 0)
{
for(i =0; i < pPos; i++)
{
gau8TxDataBuffer = gu8SCIData;
}
gau8TxDataBuffer[pPos] = '\0';
gsTxPacket.u8DataLength = pPos + 1;
memset(gu8SCIData,0,pPos);
pPos = 0;
}

就改了这两个地方,大家帮忙看看,改的代码有没有问题?谢谢!
从你这段程序来看,你数组中的最后一个字符被冲掉了。gu8SCIData[pPos + 1] = 0;中的
pPos + 1应该改为pPos++ 。你可以用codewarrior调试一下,设断点,看一下gau8TxDataBuffer中的数据是否正确。
哦,这个地方是有问题,但是把gu8SCIData[pPos + 1] = 0;去掉,不影响结果,不明白要这句有什么作用?

我现在的串口收发数据的函数是:
if((pPos > 30) || (Timer_Get() > 50))
{
DisableInterrupts;
for(i =0; i < pPos; i++)
{
gau8TxDataBuffer = gu8SCIData;
}

gau8TxDataBuffer[pPos] = '\0';
gsTxPacket.u8DataLength = pPos+1;
pPos = 0;

Timer_Reset();

if ((MCPSDataRequest(&gsTxPacket) == SUCCESS)) /* transmit data */
{
gi8AppStatus = WAITING_FOR_ACK;
MLMERXEnableRequest(&gsRxPacket, TIMEOUT_PERIOD);
u16Count = 0;
}
gu8SCIDataFlag = 0;

EnableInterrupts;

}
还是不正常,不明白为什么发数据的时候会先发第一个字节,然后再发后面其它的,这样有时就会丢失第一个字节的数据?哪位高手指点一下啊?

[此贴子已经被作者于2006-10-13 14:35:19编辑过]

返回列表