WXK
2025-02-26 814983b45844cf08f8506bec8162553cd93e2dcd
Src/application/dw_app.c
@@ -166,7 +166,7 @@
        *ts += ts_field[i] << (i * 8);
    }
}
extern u32 id,error_times;
void Dw1000_Init(void)
{
   /* Reset and initialise DW1000.
@@ -175,17 +175,18 @@
    Reset_DW1000();//重启DW1000 /* Target specific drive of RSTn line into DW1000 low for a period. */
   Spi_ChangePrescaler(SPIx_PRESCALER_SLOW);   //设置为快速模式
    dwt_initialise(DWT_LOADUCODE);//初始化DW1000
    id =  dwt_readdevid() ;
   Spi_ChangePrescaler(SPIx_PRESCALER_FAST);   //设置为快速模式
    id =  dwt_readdevid() ;
    /* Configure DW1000. See NOTE 6 below. */
    dwt_configure(&config);//配置DW1000
   
    id =  dwt_readdevid() ;
   
    /* Apply default antenna delay value. See NOTE 1 below. */
    dwt_setrxantennadelay(RX_ANT_DLY);      //设置接收天线延迟
    dwt_settxantennadelay(TX_ANT_DLY);      //设置发射天线延迟
    id =  dwt_readdevid() ;
    /* Set expected response's delay and timeout. See NOTE 4 and 5 below.
     * As this example only handles one incoming frame with always the same delay and timeout, those values can be set here once for all. */
            //设置接收超时时间
@@ -425,7 +426,7 @@
         
         tag_succ_times++;
         
            LED0_BLINK;
//            LED0_BLINK;
            
               memcpy(&anc_id_recv,&rx_buffer[ANCHOR_ID_IDX],2);
//               if(hex_dist2!=0xffff)
@@ -787,6 +788,7 @@
         //tyncpoll_time=tagslotpos*slottime;
         //tyncpoll_time=(g_com_map[DEV_ID]%max_slotpos)*slottime;   
         tag_state=NEARPOLL;
            outrange_times=0;
      }
   }else{
//         tyncpoll_time = (tagslotpos--%max_slotpos)*slottime;
@@ -850,24 +852,32 @@
extern int32_t dwt_readcarrierintegrator(void) ;
void CalculateDists(void)
{
    for(int i=0;i<11;i++)
    for(int i=0; i<11; i++)
    {
        rec_anc_signalpower[i] = exsistbase_list[i];
      if(exsistbase_list[i]>0)
      {
       // rec_anc_signalpower[i] = exsistbase_list[i];
        if(exsistbase_list[i]==KEEP_TIMES)
        {
          exsistbase_list[i]--;
          clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_2 / 1.0e6) ;
          rtd_init = tag_resprx[i] - poll_tx_ts;
          rtd_resp = anc_resptx[i] - anc_pollrx[i];
          tof = ((rtd_init - rtd_resp * (1 - clockOffsetRatio)) / 2.0) * DWT_TIME_UNITS;
          distance = tof * SPEED_OF_LIGHT;
          if(distance>-1000&&distance<100000)
            nearbase_distlist[i] = distance*100+anc_distoffset[i];
      }else{
          nearbase_distlist[i] = 0x1ffff;
      }
            exsistbase_list[i]--;
#ifdef _UWB_4G
            clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_2 / 1.0e6) ;
#else
            clockOffsetRatio = anc_clockoffset[i] * (FREQ_OFFSET_MULTIPLIER * HERTZ_TO_PPM_MULTIPLIER_CHAN_5 / 1.0e6) ;
#endif
            rtd_init = tag_resprx[i] - poll_tx_ts&0xffffffff;
            rtd_resp = anc_resptx[i] - anc_pollrx[i];
            tof = ((rtd_init - rtd_resp * (1 - clockOffsetRatio)) / 2.0) * DWT_TIME_UNITS;
            distance = tof * SPEED_OF_LIGHT;
            if(distance>-10&&distance<1000)
            {
                nearbase_distlist[i] = distance*100+anc_distoffset[i];
            } else {
                nearbase_distlist[i] = 0x1ffff;
            }
        } else {
            nearbase_distlist[i] = 0x1ffff;
        }
    }
}
void NearPoll(void)
@@ -1313,26 +1323,28 @@
//            SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
//        }
//    }
    Dw1000_Init();
//    Dw1000_Init();
    dwt_forcetrxoff();
    dwt_setinterrupt(  DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 0);
    error_times = 0;
    HAL_IWDG_Refresh(&hiwdg);
   switch(tag_state)
   {
      case REGPOLL:
         LED_LG_ON;
//         LED_LG_ON;
         Registor_Poll();         
         LED_LG_OFF;
//         LED_LG_OFF;
         break;
      case DISCPOLL:
         LED_LG_ON;
//         LED_LG_ON;
         DiscPoll();
         LED_LG_OFF;
//         LED_LG_OFF;
         break;
      case GETNEARMSG:
         trygetnearmsg_times++;   
         LED_LG_ON;
//         LED_LG_ON;
            GetNearMsg();    
      LED_LG_OFF;
//      LED_LG_OFF;
      if(trygetnearmsg_times>5)
      {
         tag_state = STARTPOLL;
@@ -1352,5 +1364,4 @@
       dwt_setinterrupt(  DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1);
      dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
        dwt_rxenable(0);
   //dwt_entersleep();
}