icoozy 发表于 2011-6-3 22:41:46

【求助】CC1101问题

买了两块CC1101模块做无线通信,51单片机控制,发现问题,接收端收到一帧空的数据,然后收到一帧正确的数据,如此重复,看图

http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_645628ZXLS5G.jpg
串口监视数据 (原文件名:数据.jpg)


发送端每秒发送一帧数据,0xf0,0xf1,0xf2和0x0a是我加的测试信息,

大虾们帮忙分析分析

代码在下面:

send_byte()和send_string()是通过串口发送数据函数

主循环部分:

while(1) {

   if(set_flag)

   {

set_flag = 0;

send_string("send test data\n",sizeof("send test data\n"));

halRFSendPacket(test_data,sizeof(test_data)-1);

halSpiStrobe(CCxxx0_SRX);       //进入接收状态

}

if(int1_flag)

{

int1_flag = 0;       //清标志位

i = MAXSIZE_BUF;

if(halRfReceivePacket(tx_buf,&i))

{

send_string(tx_buf,i);

send_byte('\n');

}

send_byte('\n');

}

}

用中断判断是否收到数据,GDO0配置为0x06,接单片机的外部中断1,下降沿触发:

void exint1(void) interrupt 2 using 1

{

int1_flag = 1;

TXLED = ~TXLED;

}

发送和接受子函数:

void halRfSendPacket(uchar *txBuffer, uchar size)

{

halSpiWriteReg(CCxxx0_TXFIFO, size);

halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);        //写入要发送的数据

halSpiStrobe(CCxxx0_STX);       //进入发送模式发送数据

while(~int1_flag);

halSpiStrobe(CCxxx0_SFTX);

int1_flag = 0;       //清标志位

}

uchar halRfReceivePacket(uchar *rxBuffer, uchar *length)

{

uchar status;

uchar packetLength;



halSpiStrobe(CCxxx0_SRX);//进入接收状态



send_byte(0xf0);



if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0

{

send_byte(0xf1);

packetLength = halSpiReadReg(CCxxx0_RXFIFO);        //读出第一个字节,此字节为该帧数据长度

if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度

{

send_byte(0xf2);

halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据

*length = packetLength;       //把接收数据长度的修改为当前数据的长度

// Read the 2 appended status bytes (status = RSSI, status = LQI)

halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位

halSpiStrobe(CCxxx0_SFRX);       //清洗接收缓冲区

return (status & CRC_OK);       //如果校验成功返回接收成功

}

else

{

send_byte(0xf3);

*length = packetLength;

halSpiStrobe(CCxxx0_SFRX);       //清洗接收缓冲区

return 0;

}

}

else

return 0;

}

redworlf007 发表于 2015-11-17 23:41:15

我也是一个帧正确,一个帧错误,交叉进行的,我怀疑是上一次正确接收后没有设置为接收状态。
页: [1]
查看完整版本: 【求助】CC1101问题