你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Spirit1的数据发送,没有发送完成状态

[复制链接]
xionghuang 发布时间:2019-8-22 10:37
采用Spirit1实现433M的无线发送,通过SPI接口配置了SPirit1,配置寄存器读写正确,写入TXFIFO数据,发送前读取TXFIFO的数据Number为20,然后启动发送,SPIRIT1_GPIO3中断能进入,但是没有发送完成的中断状态,发送后读取TXFIFO的数据Number为0,采用SPIRIT1的配置工具生成的参数配置,测试结果也是一样,SPIRIT1_GPIO3中断能进入,但是没有发送完成的中断状态,数据也没有发送出去,什么原因?
/* Spirit ON */
  SpiritEnterShutdown();

  SpiritExitShutdown();

  SpiritManagementWaExtraCurrent();

//  SpiritManagementIdentificationRFBoard();
        SpiritSetXtalFrequency();

  /* if the board has eeprom, we can compensate the offset calling SpiritManagementGetOffset
  (if eeprom is not present this fcn will return 0) */
  xRadioInit.lFrequencyBase = xRadioInit.lFrequencyBase + SpiritManagementGetOffset();

  /* Initialize the signals to drive the range extender application board */
  SpiritManagementRangeExtInit();  

  /* uC IRQ config  uC IRQ enable*/
  Sprit1_GPIO3_IRQ_Init();

  /* Spirit IRQ config */
  SpiritGpioInit(&xGpioIRQ);  

  /* Spirit Radio config */
  SpiritRadioInit(&xRadioInit);

  /* Spirit Radio set power */
  SpiritRadioSetPALeveldBm(7,POWER_DBM);
  SpiritRadioSetPALevelMaxIndex(7);

  /* Spirit Packet config */
  SpiritPktBasicInit(&xBasicInit);
  SpiritPktBasicAddressesInit(&xAddressInit);

  /* Spirit IRQs enable */
  SpiritIrqDeInit(NULL);
  SpiritIrq(TX_DATA_SENT , S_ENABLE);
  SpiritIrq(TX_FIFO_ERROR , S_ENABLE);

  /* payload length config */
  SpiritPktBasicSetPayloadLength(20);

  /* destination address.
  By default it is not used because address is disabled, see struct xAddressInit*/
  SpiritPktBasicSetDestinationAddress(0x35);

  /* IRQ registers blanking */
  SpiritIrqClearStatus();

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {         
    /* fit the TX FIFO */
    SpiritCmdStrobeFlushTxFifo();

    SpiritSpiWriteLinearFifo(20, vectcTxBuff);

    /* send the TX command */
    SpiritCmdStrobeTx();

    /* wait for TX done */
//    while(HAL_GPIO_ReadPin(GPIOA,  GPIO_PIN_11)==GPIO_PIN_RESET);

//    while(!xTxDoneFlag)
//    {
//      SpiritRefreshStatus();
//      
//      SpiritIrqGetStatus(&xIrqStatus);
//      
//      if(xIrqStatus.IRQ_TX_DATA_SENT)
//      {
//              xTxDoneFlag = SET;
//      }
//    }
//    SpiritIrqGetStatus(&xIrqStatus);
    /* wait for TX done */
    while(!xTxDoneFlag);

    xTxDoneFlag = RESET;
    g_dwtx_send_ok++;

    /* pause between two transmissions */
    HAL_Delay(500);  //delay  500ms


    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

//中断处理部分
if(GPIO_PIN_11 == GPIO_Pin)//SPIRIT1_GPIO3中断
        {
            /* Get the IRQ status */
            SpiritIrqGetStatus(&xIrqStatus);
            
            /* Check the SPIRIT TX_DATA_SENT IRQ flag */
            if(xIrqStatus.IRQ_TX_DATA_SENT)
            {
                    g_dwTest_Count[0]++;
              /* set the tx_done_flag to manage the event in the main() */
              xTxDoneFlag = SET;
//                                g_btransmitting = 0;
              
              /* toggle LED1 */
//              GPIO_Led_Invert();
                                /* Flush the RX FIFO */
//                                SpiritCmdStrobeFlushRxFifo();

                                /* RX command - to ensure the device will be ready for the next reception */
//                                SpiritCmdStrobeRx();

            }
                        /* Check the SPIRIT RX_DATA_DISC IRQ flag */
                        if(xIrqStatus.IRQ_RX_DATA_DISC)
                        {
                                /* toggle LED1 */
//                                GPIO_Led_Invert();//SdkEvalLedToggle(LED1);
                                        g_dwTest_Count[1]++;
                                /* RX command - to ensure the device will be ready for the next reception */
                                SpiritCmdStrobeRx();
                        }

                        /* Check the SPIRIT RX_DATA_READY IRQ flag */
                        if(xIrqStatus.IRQ_RX_DATA_READY)
                        {
                                g_bReceive_New_Frame = TRUE;
                                g_dwTest_Count[2]++;   
                        }
      //////////////test///////////////////////////////
      if(xIrqStatus.IRQ_TX_FIFO_ERROR)
            {
        g_dwTest_Count[3]++;

      }
    //////////////test///////////////////////////////      
        }         
void SpiritSetXtalFrequency(void)
{
        do{
            /* Delay for state transition */
            HAL_Delay(2);  //delay  2ms
            
            /* Reads the MC_STATUS register */
           SpiritRefreshStatus();
          }while(g_xStatus.MC_STATE!=MC_STATE_READY);

    SpiritRadioSetXtalFrequency(XTAL_FREQUENCY);//XTAL_FREQUENCY = 26000000;

    SpiritManagementSetRangeExtender(RANGE_EXT_NONE);

    SpiritManagementSetBand(0);

    SpiritManagementSetOffset(FREQUENCY_OFFSET);   
}

收藏 评论0 发布时间:2019-8-22 10:37

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版