yincheng.zhong
2024-05-07 36667ff9eed83df5f6460d596220908afc9b9a11
Src/application/dw_mbx_tag.c
@@ -40,7 +40,7 @@
#define TAG_NUM_IN_SYS            25
#define TAG_KEEPTIMES           30
#define REPORT_TAG_KEEPTIMES     3
#define REPORT_TAG_KEEPTIMES     5
static uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS],rec_ancdistlist[TAG_NUM_IN_SYS];
static u8 frame_seq_nb2,battary,button,uwb_losttimer,taglist_pos;
@@ -81,6 +81,8 @@
            dwt_writetxfctrl(38, 0);//设定发送长度
            result = dwt_starttx(DWT_START_TX_DELAYED);
            if(result==0)
            {
            start_time=HAL_LPTIM_ReadCounter(&hlptim1);
            timeout=100; //单位0.1ms
            end_time=start_time+(timeout<<2);
@@ -94,6 +96,7 @@
                    break;
            };
            tagofflinetime[taglist_pos] = 0; 
        }
//            printf("测距成功,序号%d,距离%d\r\n",frame_seq_nb2,tagdist_list[taglist_pos]);
//            delay_ms(10);
}
@@ -132,6 +135,7 @@
uint32_t temp231;
extern uint32_t uwbled,gpsled,loraled,powerled;
uint32_t uwbdezhuangtai;
u8 uwb_rx_remaintime_ms,gps_chafenlingqi;
void MbxTagUwbRec(void)
{
   
@@ -140,25 +144,7 @@
   uint32_t rec_syncid,status_reg;
   uint16_t checksum;
    uint8_t kk;
    dwt_setrxtimeout(3000);//设定接收超时时间,0位没有超时时间
   dwt_rxenable(0);//打开接收
//    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_SET);
//    printf("成功接收LORA\r\n");
        temp231 =  dwt_read32bitreg(CHAN_CTRL_ID) ;
    start_time=HAL_LPTIM_ReadCounter(&hlptim1);
    timeout=100; //单位0.1ms
    end_time=start_time+(timeout<<2);
    if(end_time>=32768)
    {end_time-=32768;}
    current_time=HAL_LPTIM_ReadCounter(&hlptim1);
    while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//不断查询芯片状态直到接收成功或者出现错误
    {
        current_time=HAL_LPTIM_ReadCounter(&hlptim1);
        if(current_time>=end_time&&current_time<end_time+15000)
            break;
    };
   uwbdezhuangtai=status_reg;
    status_reg = dwt_read32bitreg(SYS_STATUS_ID);
//    printf("UWB״̬:%x\r\n",uwbdezhuangtai);
   if (status_reg & SYS_STATUS_RXFCG && status_reg!=0xffffffff)//成功接收
      {
@@ -230,14 +216,16 @@
      dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR);
      //  dwt_rxenable(0);
        }
    if(uwb_rx_remaintime_ms>0)
    {
        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(uwb_rx_remaintime_ms*1000);//设定接收超时时间,0位没有超时时间
        dwt_rxenable(0);//打开接收
    }else{
        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);
        dwt_forcetrxoff();
        dwt_entersleep();
//printf("UWB״̬:%x\r\n",uwbdezhuangtai);
//printf("ID:%x\r\n",tag_id_recv);
//printf("测距:%x\r\n",rec_ancdistlist[0]);
//uwbdezhuangtai=0;
//tag_id_recv=0;
    }
}
wg_state_enum wg_state = WG_Lost;
uint8_t lora_sendbuffer[200];
@@ -282,7 +270,7 @@
    }
}
static u16 checksum;
u8 gps_state,gps_chafenlingqi,gps_satel_num,gps_signalpower;
u8 gps_state,gps_satel_num,gps_signalpower;
double gps_jingdu,gps_weidu;
float gps_height;
extern u8 bat_percent,stationary_flag;
@@ -307,6 +295,7 @@
#define LORA_REPORT_MAXANC_NUM  7
u8 tarray[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},test_num;
extern float Height;
extern IWDG_HandleTypeDef hiwdg;
void LoraReportPoll(void)
{
    if(sendcount++>0)
@@ -315,7 +304,7 @@
    LoraReportFreqPoll();
    flag_getwgresp = 0;
  //  wg_report_freq = REPORT_MANGE_CHANNEL_FRQ;
    SwitchLoraSettings(wg_report_freq,wg_report_sf,g_com_map[LORA_POWER]);
   if(heatbeat_count++>HEATBEAT_UPDATE_TIME && WG_Connected == wg_state) //如果心跳包到达上传时间,并且网关处于链接状态,就上传心跳包
    {
        heatbeat_count = 0;
@@ -378,8 +367,12 @@
    
    checksum = Checksum_u16(lora_sendbuffer,4*report_ancnum+ANCID_IDX);
    memcpy(&lora_sendbuffer[ANCID_IDX+report_ancnum*4],&checksum,2);
 //   UWB_RXStart(100);
    SwitchLoraSettings(wg_report_freq,wg_report_sf,g_com_map[LORA_POWER]);
    Radio.Send(lora_sendbuffer,ANCID_IDX+report_ancnum*4+2);
    UWB_RXStart(100);
     HAL_IWDG_Refresh(&hiwdg);
//    GetPressAndHeight();  
//    intheight = Height*100;