From eddac77c8fa85acccbf6eeff48b1ff760c70843a Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期三, 01 十一月 2023 15:33:01 +0800 Subject: [PATCH] 版本v2.7,大包字节uwb传输测试成功。 --- Src/application/dw_app.c | 111 ++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 69 insertions(+), 42 deletions(-) diff --git a/Src/application/dw_app.c b/Src/application/dw_app.c index 5c0f4c3..00d603f 100644 --- a/Src/application/dw_app.c +++ b/Src/application/dw_app.c @@ -80,7 +80,7 @@ NEARPOLL, SINGLEPOLL, }tag_state=STARTPOLL; -static dwt_config_t config = { + dwt_config_t config = { 2, /* Channel number. */ DWT_PRF_64M, /* Pulse repetition frequency. */ DWT_PLEN_128, /* Preamble length. */ @@ -89,7 +89,7 @@ 9, /* RX preamble code. Used in RX only. */ 1, /* Use non-standard SFD (Boolean) */ DWT_BR_6M8, /* Data rate. */ - DWT_PHRMODE_STD, /* PHY header mode. */ + DWT_PHRMODE_EXT, /* PHY header mode. */ (129 + 8 - 8) /* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */ }; static uint8_t tx_poll_msg[20] = {0}; @@ -118,7 +118,7 @@ LPFilter_Frac* p_Dis_Filter; //测距用的低通滤波器 - +void GetNearMsg(void); static uint64_t get_tx_timestamp_u64(void) { uint8_t ts_tab[5]; @@ -610,8 +610,9 @@ if(minddist!=0x1ffff&&minddist!=0) { trygetnearmsg_times = 0; - tag_state = GETNEARMSG; + tag_state = GETNEARMSG; mainbase_id = mindist_ancid; + GetNearMsg(); } if(getsync_flag==0) @@ -846,6 +847,11 @@ } } +extern uint16_t tagid_list[TAG_NUM_IN_SYS]; +extern uint16_t taglist_num; +extern int32_t tagdist_list[TAG_NUM_IN_SYS]; +uint16_t nearbase_taglist_num; +extern uint8_t uwb_tx[300]; void NearPoll(void) { @@ -881,24 +887,35 @@ tx_near_msg[BUTTON_IDX] = userkey_state|stationary_flag<<1|gotosleep_flag<<2|motor_flag<<5; tx_near_msg[SEQUENCE_IDX] = frame_seq_nb; tx_near_msg[SEQUENCEH_IDX] = (frame_seq_nb++)>>8; - tx_near_msg[NEARBASENUM_INDEX] = nearbase_num; + if(taglist_num>10) + {taglist_num=10;} + nearbase_taglist_num=nearbase_num+taglist_num; + tx_near_msg[NEARBASENUM_INDEX] = nearbase_taglist_num; memcpy(&tx_near_msg[NEARBASEID_INDEX],&nearbaseid_list,nearbase_num*2); - memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*2],&nearbase_distlist,nearbase_num*4+4); - memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*6+4],&rec_anc_signalpower,nearbase_num*2+2); + memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*2],&tagid_list,taglist_num*2); + + memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*2+taglist_num*2],&nearbase_distlist,nearbase_num*4+4); + memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*2+taglist_num*2+nearbase_num*4+4],&tagdist_list,taglist_num*4); + + memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_taglist_num*12+4],&rec_anc_signalpower,nearbase_taglist_num*2+2); if(intheight!=0) intheight+=g_com_map[HEIGHTOFFEST_INDEX]; - memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*8+6],&intheight,2); +// memcpy(&tx_near_msg[NEARBASEID_INDEX+nearbase_num*8+6],&intheight,2); tx_near_msg[MESSAGE_TYPE_IDX] = POS_POLL; tx_near_msg[NEARP_TAGFREQ_INDEX] = tag_frequency; tx_near_msg[NEARP_TAGSLOTPOS_INDEX] = tagslotpos; memcpy(&tx_near_msg[ANCHOR_ID_IDX],&mainbase_id,2); - dwt_writetxdata(29+8*nearbase_num, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去 - dwt_writetxfctrl(29+8*nearbase_num, 0);//设置超宽带发送数据长度 + dwt_writetxdata(29+8*nearbase_taglist_num, tx_near_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去 + dwt_writetxfctrl(29+8*nearbase_taglist_num, 0);//设置超宽带发送数据长度 + +// dwt_writetxdata(280, uwb_tx, 0);//将Poll包数据传给DW1000,将在开启发送时传出去 +// dwt_writetxfctrl(282, 0);//设置超宽带发送数据长度 + current_count=HAL_LPTIM_ReadCounter(&hlptim1); while(current_count<poll_startcount||current_count>poll_startcount+16384) @@ -923,7 +940,7 @@ flag_getresponse=0; start_count=HAL_LPTIM_ReadCounter(&hlptim1); recbase_num=0; - timeout=ceil((float)nearbase_num*SLOT_SCALE)+3; + timeout=ceil((float)nearbase_taglist_num*SLOT_SCALE)+3; end_count=start_count+(timeout<<5); if(end_count>=32768) {end_count-=32768;} @@ -1055,18 +1072,18 @@ } nearbase_distlist[rec_nearbasepos+1]=temp_dist; // nearbase_distlist[1]对应 rec_nearbaseid[0]的距离 final_msg_set_ts(&tx_near_msg[FINAL_MSG_RESP_RX_NEARBASE_IDX+(rec_nearbasepos)*4], resp_rx_ts); - if(temp_dist<salvebase_mindist&&nearbase_switchdistlist[rec_nearbasepos]==1) + if(temp_dist<salvebase_mindist&&nearbase_switchdistlist[rec_nearbasepos]!=0&&(nearbase_switchdistlist[rec_nearbasepos]==1||temp_dist<nearbase_switchdistlist[rec_nearbasepos])) { salvebase_mindist = temp_dist; mindist_slavebaseid = rec_nearbaseid; } #ifdef SWITCHBASE_ZHUANDIAN - if(temp_dist<nearbase_switchdistlist[rec_nearbasepos]&&nearbase_switchdistlist[rec_nearbasepos]>1&&temp_dist>0) - { - mainbase_id = rec_nearbaseid; - tag_state = GETNEARMSG; - trygetnearmsg_times = 0; - } +// if(temp_dist<nearbase_switchdistlist[rec_nearbasepos]&&nearbase_switchdistlist[rec_nearbasepos]>1&&temp_dist>0) +// { +// mainbase_id = rec_nearbaseid; +// tag_state = GETNEARMSG; +// trygetnearmsg_times = 0; +// } #endif } @@ -1094,23 +1111,27 @@ if(salvebase_mindist<mainbase_dist- THRESHOLD_CHANGE_MAINBASE_DIST ) { changemainbase_count++; - if(changemainbase_count>tag_frequency*2) + if(changemainbase_count>2) { - mainbase_id = mindist_slavebaseid; - tag_state = GETNEARMSG; - trygetnearmsg_times = 0; + changemainbase_count = 0; + mainbase_id = mindist_slavebaseid; + tag_state = GETNEARMSG; + trygetnearmsg_times = 0; + GetNearMsg(); } }else{ changemainbase_count = 0; } #endif - }else if(mainbase_lost_count>5*tag_frequency) + }else if(mainbase_lost_count>10) { + mainbase_lost_count = 0; tag_state = DISCPOLL; + DiscPoll(); } if(mainbase_lost_count!=0) { - if(mainbase_lost_count<=tag_frequency*1) + if(mainbase_lost_count<=5) {NextSlotDelayMs(0); }else{ NextSlotDelayMs(0); @@ -1167,6 +1188,7 @@ if(nearbaseid_list[i]!=nearbaseid_list2[i]) { tag_state = GETNEARMSG; + GetNearMsg(); trygetnearmsg_times = 0; nearbaseid_list0[i]=1; } @@ -1263,27 +1285,27 @@ } } u32 id,error_times=0; - extern float Height; void Tag_App(void)//发送模式(TAG标签) { - //LED0_ON; - SPIx_CS_GPIO->BRR = SPIx_CS; - delay_us(700); - SPIx_CS_GPIO->BSRR = SPIx_CS; - id = dwt_readdevid() ; - while (DWT_DEVICE_ID != id) - { - // Dw1000_Init(); - id = dwt_readdevid() ; - IdleTask(); - if(error_times++>20) - { - printf("DW ID ERROR.\r\n"); - SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader - } - } +// //LED0_ON; +// SPIx_CS_GPIO->BRR = SPIx_CS; +// delay_us(700); +// SPIx_CS_GPIO->BSRR = SPIx_CS; +// id = dwt_readdevid() ; +// while (DWT_DEVICE_ID != id) +// { +// // Dw1000_Init(); +// id = dwt_readdevid() ; +// IdleTask(); +// if(error_times++>20) +// { +// printf("DW ID ERROR.\r\n"); +// SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader +// } +// } + Dw1000_Init(); error_times = 0; switch(tag_state) { @@ -1317,5 +1339,10 @@ break; } userkey_state = !GET_USERKEY; - dwt_entersleep(); + dwt_forcetrxoff(); +// Dw1000_Init(); + 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(); } -- Gitblit v1.9.3