微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > STM8S003+cc1101 接收数据长度, 地址正确, 但是后面的数据都是乱码, 怎么回事?

STM8S003+cc1101 接收数据长度, 地址正确, 但是后面的数据都是乱码, 怎么回事?

时间:12-23 整理:3721RD 点击:

代码是模块三提供的, 现在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芯片接收模式,接收数据
    }   
}

 

TI的FAE不在么?

这个,貌似应该去ST的论坛问啊,感觉问题不太可能出现在CC1101,因为数据都是从fifo里读出来的。如果发送的不出错的话。

有没有用示波器看过SPI线上的数据对不对,再有把数据发送速率降下来看看,还有就是进中断以后把中断标志位清了。

TI官网上有MSP430 + 1101的程序,你可以下了参考一下

HW3000超低双向无线fsk模块完美替代CC1101、CC1120、A7139、A7108、si4432、si4438、si4463 ;海尔集成半导体推出了个芯片型号HW3000,用量巨大,距离有2.5公里双向,与si4463差不多,比si4432 si4438远,比A7108 和A7139好很多,如果是10kpbs,比sx1278 远。LoRa没办法快速率,可了解,推荐!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top