代码是模块三提供的, 现在SPI都是通的, 接收端能接收到发射端的数据, 但是只有前面的数据长度,和地址码是正确的,
后面的数据都是乱码, 怎么回事?
当我发射端发射的时候, 这边GPO0我配置为0x06, 能收到中断,然后开始进入下面函数收数, 设置的地址码是0x05, 数据长度是10, 加上地址就是11,同步码0x8799 ,
//我发射的数据是0x1,0x2,0x3,...0x09, 而接收到的 testBuffer里面的数据,都是乱码, 0xb3,0x......
发射,接收都是用的同样的MCU, 和驱动, 现在不知道是哪里问题, 谁能能帮忙出出主意?
INT8U CC1101RecPacket( INT8U *rxBuffer )
{
INT8U status[2];
INT8U pktLen;
addr0=0;
testBuffer[19]=5;
if ( CC1101GetRXCnt( ) != 0 )
{
// CC1101ReadMultiReg(CC1101_RXFIFO, testBuffer, 20); // Pull data
pktLen = CC1101ReadReg(CC1101_RXFIFO); // Read length byte //这个pkLen值收到的是0x0b,
if( ( CC1101ReadReg( CC1101_PKTCTRL1 ) & ~0x03 ) != 0 )
{
addr0 = CC1101ReadReg(CC1101_RXFIFO); //这个addr收到数据是0x05
}
if( pktLen == 0 ) { return 0; }
else { pktLen --; }
CC1101ReadMultiReg(CC1101_RXFIFO, testBuffer, pktLen); // Pull data //我发射的数据是0x1,0x2,0x3,...0x09, 而接收到的 testBuffer里面的数据,都是乱码, 0xb3,0x......
CC1101ReadMultiReg(CC1101_RXFIFO, status, 2); // Read status bytes
CC1101ClrRXBuff( );
if( status[1] & CRC_OK ) { return pktLen; }
else { return 0; }
}
else { return 0; } // Error
}
void CC1101Init( void )
{
volatile INT8U i, j;
// 配置CC1101相关控制引脚 CSN(PB4), IRQ(PA2), GDO2(PA3)
CC_CSN_INIT();
GPIO_Init(PORT_CC_IRQ, PIN_CC_IRQ, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(PORT_CC_GDO2, PIN_CC_GDO2, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(PORT_GDO0, PIN__GDO0, GPIO_MODE_IN_PU_NO_IT);
CC1101Reset( );
for( i = 0; i < 22; i++ )
{
CC1101WriteReg( CC1101InitData[i][0], CC1101InitData[i][1] );
}
CC1101SetAddress( 0x05, BROAD_0AND255 );
CC1101SetSYNC( 0x8799 );
CC1101WriteReg(CC1101_MDMCFG1, 0x72); //Modem Configuration
CC1101WriteMultiReg(CC1101_PATABLE, PaTabel, 8 );
i = CC1101ReadStatus( CC1101_PARTNUM );//for test, must be 0x80
i = CC1101ReadStatus( CC1101_VERSION );//for test, refer to the datasheet
}
void RF_RecvHandler(void)
{
INT8U error=0, i=0, length=0, recv_buffer[65]={ 0 };
CC1101SetTRMode(RX_MODE); // 设置RF芯片接收模式,接收数据
if (0 == CC_IRQ_READ()) // 检测无线模块是否产生接收中断
{
while (CC_IRQ_READ() == 0);
// 数据请零,防止误判断
for (i=0; i<SEND_LENGTH; i++) { recv_buffer[i] = 0; }
// 读取接收到的数据长度和数据内容
length = CC1101RecPacket(recv_buffer);
// 判断数据是否有误,接收到的信号应该为0-9
for (i=0, error=0; i<10; i++)
{
if (recv_buffer[i] != i) { error=1; break; } // 数据出错
}
if ((length==10) && (error==0)) // 数据正确
{
// LED_TOG(); // LED闪烁,指示收到正确数据
// DelayMs(10);
// CC1101SetTRMode(TX_MODE); // 发送应答信号
CC1101SendPacket(AckBuffer, ACK_LENGTH, ADDRESS_CHECK);
RecvCnt++;
// LCD_LenDisplay(RecvCnt); // 更新显示
}
// CC1101SetTRMode(RX_MODE); // 设置RF芯片接收模式,接收数据
}
}