微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC1101有时不能发码?源码如下求技术大神解答

CC1101有时不能发码?源码如下求技术大神解答

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

应用:MSP430控制CC1101发码,由外部电源触发电源给CC1101供电2S时间,让CC1101发4条相同协议的码,有时不能发码,(已确定触发电源供电正常)

初始化和发码代码如下:

/*********************************************************
//函数名称:|PORT_INIT()
//函数功能:|端口初始化
*********************************************************/
void PORT_INIT(void)
{
    P2SEL &= ~(TI_CC_CSn_PIN); //TI_CC_GDO0_PIN+ 
    P2SEL2 &= ~(TI_CC_CSn_PIN); //TI_CC_GDO0_PIN+ 

    TI_CC_GDO0_PxDIR &= ~TI_CC_GDO0_PIN; 
    TI_CC_GDO0_PxIES &= ~ TI_CC_GDO0_PIN; 
    TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag
    TI_CC_GDO0_PxIE &= ~ TI_CC_GDO0_PIN; 
    TI_CC_GDO0_PxREN |= TI_CC_GDO0_PIN; 
}

/*********************************************************
函数名称:|CC1101_INIT()
函数功能:|CC1101初始化
*********************************************************/
void CC1101_INIT(void)
{
    TI_CC_SPISetup(); // Initialize SPI port 
    TI_CC_PowerupResetCCxxxx(); // Reset CCxxxx
    writeRFSettings(); // Write RF settings to config reg
    temp = TI_CC_SPIReadReg(TI_CCxxx0_IOCFG2); // GDO2 output pin configuration
    TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen); //Write PATABLE
    TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); // Exit RX / TX
    TI_CC_SPIStrobe(TI_CCxxx0_SWOR); // Start automatic RX polling sequence 
}

/*********************************************************
函数名称:|Send_RF_Data()
函数功能:|发送数据到主机
*********************************************************/ 
void Send_RF_Data(void)
{
    Product_State[0]=Read_flashByte((unsigned char*)HOST_MAC_ID0);
    Product_State[1]=Read_flashByte((unsigned char*)HOST_MAC_ID1);
    Product_State[2]=Read_flashByte((unsigned char*)HOST_MAC_ID2);

    RF_TxBuf[0] = 0x08; //1字节版本号
    RF_TxBuf[1] = 0x0D; //1字节有效长度
    RF_TxBuf[2] = 0XFF;
    RF_TxBuf[3] = 0XFF;
    RF_TxBuf[4] = 0XFF; 
    RF_TxBuf[5] = MAC_buf[0]; //3字节设备地址MAC_buf[0],MAC_buf[1],MAC_buf[2]
    RF_TxBuf[6] = MAC_buf[1];
    RF_TxBuf[7] = MAC_buf[2];
    RF_TxBuf[8] = 0x09; //1字节设备大类
    RF_TxBuf[9] = 0x07; //1字节设备小类
    RF_TxBuf[10] = 0x00; //2字节加密轮询
    RF_TxBuf[11] = 0x00;
    RF_TxBuf[12] = REPORT; //1字节控制命令
    _DINT();
   TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); 
   TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;
  TI_CC_GDO0_PxIE &= ~TI_CC_GDO0_PIN;
  RFSendPacket(RF_TxBuf, 13);

   _EINT(); 

TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); // Exit RX / TX
TI_CC_SPIStrobe(TI_CCxxx0_STX); // Enable TX.
TI_CC_SPIStrobe(TI_CCxxx0_SFRX); // Flush the RX FIFO buffer.
TI_CC_SPIStrobe(TI_CCxxx0_SRX); // Enable RX.
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; 
TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN;
TI_CC_SPIStrobe(TI_CCxxx0_SFTX); // Flush the TX FIFO buffer. 
}

void main( void )
{
    WDTCTL = WDTPW + WDTHOLD;
    BCSCTL1 = CALBC1_16MHZ;
    DCOCTL = CALDCO_16MHZ; 
    _DINT(); 
    DATA_INIT(); 
    PORT_INIT();
    CC1101_INIT(); 
    _EINT(); 
   for(x=0;x<4;x++)
   {
      Send_RF_Data();
   }
  while(1);

 }

你这个供电2S的间隔是多少?也就是说,供了2S发送了4条数据之后,断电多长时间再开始下一次供电?

另外,建议加个LED指示,看看到底是430端还是1101端的原因。

2S以上再次通电,这是用在水浸传感,有水来才会通电,实际测试不管多长时间后通电有时也会不发码。

刚通电时的电压稳吗?

还是建议你通过led来观察一下,看看出现你说的不发码的情况时,是430异常还是1101异常

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

网站地图

Top