TI中文支持网
TI专业的中文技术问题搜集分享网站

CC430F5137,无线通信接收到数据通过UART串口发送的问题

使用的是simpliciti协议,程序如下:

if (SMPL_SUCCESS == SMPL_Receive(linkID0, ed_data, &len))
{
if (len == 4)
{ step = ed_data[1] * 255 * 255 + ed_data[2] * 255 + ed_data[3];
ShowDigit(step);
}

ShowDigit是把接收到的数据转成ASCII码

void ShowDigit(long digit)
{
char c[5];
c[0]=digit/10000+0x30;
c[1]=digit%10000/1000+0x30;
c[2]=digit%1000/100+0x30;
c[3]=digit%100/10+0x30;
c[4]=digit%10+0x30;
char code[]={0xf0,0x5a,0x89,c[0],c[1],c[2],c[3],c[4],0xa5,0xf0};
CopyArray(tcode,code);

CopyArray函数把Showdigit函数中code数组里的每一个成员拷贝给全局定义的数组tcode,并且写入到发动缓冲中。指针*newtp已经在之前指向了tcode数组的第一个成员。

void CopyArray(char * tp,char * cp)
{

do

{
*tp=*cp;//代码数组逐字节拷贝至待发送代码数组
tp++;//发送指针自增
cp++;//代码指针自增
// }while(!((*otp==0xa5)&(*tp==0xf0)));//未到代码段末尾循环
}while(*tp!=0xf0);
overtransfer = SEND_IMCOMPLETE;
UCA0TXBUF = *newtp;
while(overtransfer){};
}

第一帧接收没问题,接收到一帧之后把每个字节写入串口缓冲区,通过串口发送给上位机之后就再也收不到数了。通过仿真发现是SMPL_Receive函数返回了SMPL_NO_FRAME,而且在这之后一直返回这个值。如果不加入串口发送程序,整个接收过程就没有任何问题。

串口发送和无线接收都使用的是中断,是不是和这有关系?

灰小子:

SMPL_NO_FRAME 是接收数据缓冲区无有效数据帧

这种情况一般是通讯失败了

Yanyue Liu:

回复 灰小子:

通讯失败大概是什么样的状态?是指两者之间的连接断开了吗?还是说令牌或者连接ID出了问题?

赞(0)
未经允许不得转载:TI中文支持网 » CC430F5137,无线通信接收到数据通过UART串口发送的问题
分享到: 更多 (0)