From a05285d3b4ea5aa0609a2a23aa867c17c0611a38 Mon Sep 17 00:00:00 2001 From: yincheng.zhong <634916154@qq.com> Date: 星期日, 18 二月 2024 10:17:57 +0800 Subject: [PATCH] 配合网关调试标签上传回复部分,测距部分已经调通 --- Src/application/dw_ancapp.c | 108 ++++++++++++++++++++++++++++++++++------------------- 1 files changed, 69 insertions(+), 39 deletions(-) diff --git a/Src/application/dw_ancapp.c b/Src/application/dw_ancapp.c index d76d691..3b0a160 100644 --- a/Src/application/dw_ancapp.c +++ b/Src/application/dw_ancapp.c @@ -52,7 +52,8 @@ static uint8_t flag_syncbase,sync_seq,synclost_timer,temp_nearbaspos; static uint16_t sync_timer; static uint8_t send_buffer[150]; -static uint8_t frame_seq_nb2,battary,button,ancidlist_num; +static uint8_t battary,button,ancidlist_num; +uint8_t frame_seq_nb2; uint8_t rec_nearbase_num; 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 int16_t rec_antdelay; @@ -179,6 +180,7 @@ u16 basesystimer,uwb_losttimer; uint8_t remotesend_state,remotesend_index; uint16_t random_time; +u32 value; uint8_t Anchor_RecNearPoll(uint8_t ancrec_nearbasepos) //0 mainbase 1 first near_base { uint8_t motorstate; @@ -194,10 +196,10 @@ if(rec_nearbase_num == ancrec_nearbasepos)//抢占模式 { random_time = (GetLPTime()%100); - resp_tx_time = (poll_rx_ts+((random_time+rec_nearbase_num*20 + POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。 + resp_tx_time = (poll_rx_ts+((/*value+*/random_time+rec_nearbase_num*20 + POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。 }else{ - resp_tx_time = (poll_rx_ts + ((rec_nearbase_num*20+POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。 + resp_tx_time = (poll_rx_ts + ((/*value+ */rec_nearbase_num*20+POLL_RX_TO_RESP_TX_DLY_UUS+ancrec_nearbasepos*DELAY_BETWEEN_TWO_FRAME_UUS) * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。 } dwt_setdelayedtrxtime(resp_tx_time);//设置Response发送时间T3 //dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(rec_nearbase_num+1-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置发送完成后开启接收延迟时间 @@ -228,23 +230,31 @@ // result = dwt_starttx(DWT_START_TX_DELAYED); //// uwb_timeout = 0; // if(result == 0) +// { uwb_timeout=lp_time; - while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_TXFRS | SYS_STATUS_ALL_RX_ERR)))///不断查询芯片状态直到接收成功或者出现错误 + while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & SYS_STATUS_TXFRS ))///不断查询芯片状态直到接收成功或者出现错误 { - current_time=HAL_LPTIM_ReadCounter(&hlptim1); - if(current_time>end_time/*||current_time<end_time+15000*/) - { -// printf("debug2 timec:%d timee:%d\r\n",current_time,end_time); - break;} -// if(lp_time-uwb_timeout>2) -// break; +// current_time=HAL_LPTIM_ReadCounter(&hlptim1); +// if(current_time>end_time+((32768/1000)*3)||current_time<end_time+15000) +// { +//// printf("debug2 timec:%d timee:%d\r\n",current_time,end_time); +// break;} + if(lp_time-uwb_timeout>2) + break; }; - dwt_rxenable(0); +// } +// dwt_rxenable(0); } -uint8_t power_and_key=0; + uint16_t target_tagid[12] = {0x1316,0x1394,0x1265,0x1318,0x1306,0x1304,0x1376,0x1312,0x1277,0x1388,0x1140,0x1392}; +uint16_t Lora_tx_ancid[50]; +uint16_t Lora_tx_ancdist[50]; +uint8_t Lora_tx_anc_electricity[50]; +uint8_t Lora_tx_ancnum=0; +uint8_t break_flag ; +uint16_t RX_TIMEOUTs_UWB; void Anchor_App(void) { @@ -252,7 +262,7 @@ u16 tempid; uint32_t rec_syncid; uint16_t checksum; - + uint8_t kk; dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间 dwt_rxenable(0);//打开接收 @@ -260,7 +270,7 @@ start_time=HAL_LPTIM_ReadCounter(&hlptim1); - end_time=start_time+((32768/1000)*20); + end_time=start_time+((32768/1000)*2); if(end_time>=32768) {end_time-=32768;} current_time=HAL_LPTIM_ReadCounter(&hlptim1); @@ -278,7 +288,7 @@ { uint16_t tag_recv_interval; float temp_tagpos; - + dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS); frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;//获得接收数据长度 recpoll_len = frame_len; @@ -289,7 +299,7 @@ //将收到的tag_id分别写入各次通讯的包中,为多标签通讯服务,防止一次通讯中接收到不同ID标签的数据 memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2); - +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // printf("ID %x\r\n",tag_id_recv); switch(rx_buffer[MESSAGE_TYPE_IDX]) {uint8_t target_tagi; @@ -330,29 +340,48 @@ for(u8 i=0;i<rec_nearbase_num;i++) { if(rec_ancidlist[i] == dev_id) - { -// PushAnchorDataArray(tag_id_recv,rec_ancdistlist[i],-(int8_t)firstpath_power); - - // PushAnchorDataArray(tag_id_recv,rec_ancdistlist[i],battary); - } + { + for(kk=0;kk<Lora_tx_ancnum;kk++) + { + if(Lora_tx_ancid[kk]==tag_id_recv) + { +// Lora_tx_ancnum--; + Lora_tx_ancdist[kk]=rec_ancdistlist[i]; + Lora_tx_anc_electricity[kk]=battary; + break_flag=1; + break; + } + } + if(break_flag) + { + break_flag=0; + break; + } + Lora_tx_ancid[Lora_tx_ancnum]=tag_id_recv; + Lora_tx_ancdist[Lora_tx_ancnum]=rec_ancdistlist[i]; + Lora_tx_anc_electricity[Lora_tx_ancnum]=battary; +// printf("接收到uwb测距:%d",Lora_tx_ancdist[0]); + Lora_tx_ancnum++; + RX_TIMEOUTs_UWB++; + } } -// #ifdef USART_ALL_OUTPUT - usart_send[2] = 0x12;//正常模式 - usart_send[3] = 8+rec_nearbase_num*4;//数据段长度 - memcpy(&usart_send[4],&tag_id_recv,2); - usart_send[6] = frame_seq_nb2;//包序 - power_and_key=battary<<1;//把按键跟电量2合1,发出去 - power_and_key=power_and_key+button; - memcpy(usart_send+7,&power_and_key,1); - - usart_send[8] = rec_nearbase_num;//lora等待应答位 - usart_send[9] = lora_yingda_flag; - memcpy(&usart_send[10],&rec_ancidlist,2*rec_nearbase_num); - memcpy(&usart_send[10+rec_nearbase_num*2],&rec_ancdistlist,2*rec_nearbase_num); - checksum = Checksum_u16(&usart_send[2],8+4*rec_nearbase_num); - memcpy(&usart_send[10+4*rec_nearbase_num],&checksum,2); -// UART_PushFrame(usart_send,12+rec_nearbase_num*4); -// #endif +//// #ifdef USART_ALL_OUTPUT +// usart_send[2] = 0x12;//正常模式 +// usart_send[3] = 8+rec_nearbase_num*4;//数据段长度 +// memcpy(&usart_send[4],&tag_id_recv,2); +// usart_send[6] = frame_seq_nb2;//包序 +// power_and_key=battary<<1;//把按键跟电量2合1,发出去 +// power_and_key=power_and_key+button; +// memcpy(usart_send+7,&power_and_key,1); +// usart_send[8] = lora_yingda_flag;//lora等待应答位 +// usart_send[9] = rec_nearbase_num;//lora等待应答位 +//// usart_send[9] = lora_yingda_flag; +// memcpy(&usart_send[10],&rec_ancidlist,2*rec_nearbase_num); +// memcpy(&usart_send[10+rec_nearbase_num*2],&rec_ancdistlist,2*rec_nearbase_num); +// checksum = Checksum_u16(&usart_send[2],8+4*rec_nearbase_num); +// memcpy(&usart_send[10+4*rec_nearbase_num],&checksum,2); +//// UART_PushFrame(usart_send,12+rec_nearbase_num*4); +//// #endif taglist_pos=CmpTagInList(tag_id_recv); if(taglist_num>=TAG_NUM_IN_SYS) @@ -386,6 +415,7 @@ break; } } + if(i==rec_nearbase_num) { seize_anchor=1; //抢占anchor -- Gitblit v1.9.3