From e3cc01b77b6f240140d2536e365e559b42d1505c Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期二, 22 七月 2025 15:27:30 +0800 Subject: [PATCH] V1.0 开发完成 5S一次,实际休眠时间要诚5 上位机设置除以5就行 休眠18ua 功耗 --- keil/uwb_app.c | 472 +++++++++++++++++++++++++++++++++------------------------- 1 files changed, 267 insertions(+), 205 deletions(-) diff --git a/keil/uwb_app.c b/keil/uwb_app.c index c70881a..29fa8df 100644 --- a/keil/uwb_app.c +++ b/keil/uwb_app.c @@ -116,7 +116,7 @@ uint8_t phy_work_mode; /* PHY_TX / PHY_RX / PHT_TX|PHY_RX */ struct UWB_CONFIG_T phy_cfg; }; - +extern uint8_t uwb_ch; static struct mk_uwb_configure config = { .phy_work_mode = (uint8_t)(PHY_TX | PHY_RX), .phy_cfg.ch_num = 5, /* Channel number. */ @@ -230,6 +230,8 @@ extern uint16_t mubiao_anchor_ID; uint8_t Lora_qingqiu_flag; extern uint16_t Lora_qingqiu_bao; +uint8_t shengji_flag; +extern uint8_t Dtu_shengji_jindu[20]; static void rx_int_callback(struct MAC_HW_REPORT_T *rx_report) { uint8_t valid_sts=0; uint16_t checksum1 = 0,dest_id; @@ -251,7 +253,8 @@ rssi = rx_report->rssi; receive_flag=1; // uart_send(UART_ID0, rx_buf,rx_length, NULL); - if(rx_buf[MESSAGE_TYPE_IDX]==MBX_POLL) + gpio_pin_toggle(IO_PIN_4); + if(rx_buf[MESSAGE_TYPE_IDX]==MBX_POLL&&!shengji_flag) { Anchor_App(); } @@ -264,6 +267,7 @@ { if(!memcmp(&dev_id,&dest_id,2)/*||dest_id==0xffff||(dest_id==0xfffe&&get_channel==5)*/) { + shengji_flag=1; switch(rx_buf[MSG_TYPE_IDX]) { case LORA_MSGTYPE_UPDATE_CONFIRM: @@ -285,8 +289,13 @@ break; case 0x99: - LOG_INFO(TRACE_MODULE_APP, "收到结束升级请求\r\n",Lora_qingqiu_bao); - delay_ms(500); +// LOG_INFO(TRACE_MODULE_APP, "收到结束升级请求\r\n",Lora_qingqiu_bao); + delay_ms(200); + Dtu_shengji_jindu[4]=100; + memcpy(&Dtu_shengji_jindu[5],&mubiao_anchor_ID,2); + uart_send(UART_ID0, Dtu_shengji_jindu,9, NULL); + + delay_ms(1000); // Lora_upanc_flag=0; Lora_qingqiu_flag=0; NVIC_SystemReset(); @@ -317,7 +326,7 @@ // } } } - + #ifdef STS_MODE valid_sts= sts_valid_check(); if (valid_sts) @@ -649,6 +658,33 @@ if(HIDO_TimerGetTick()-uwbtasktimer >=1) { + + for(uint16_t i=0;i<taglist_num-1;i++) + { + for(uint16_t j=0;j<taglist_num-1-i;j++) + { + if(tagdist_list[j]>tagdist_list[j+1]) + { + uint16_t id,dist,version; + uint8_t bat; + id = tagid_list[j]; + dist = tagdist_list[j]; + version = anchordata_version[j]; + tagid_list[j] = tagid_list[j+1]; + tagdist_list[j] = tagdist_list[j+1]; + anchordata_version[j] = anchordata_version[j+1]; + tagid_list[j+1] = id; + tagdist_list[j+1] = dist; + anchordata_version[j+1] = version; + } + } + + } + + if(taglist_num>6) + { + taglist_num=6; + } uwbtasktimer = HIDO_TimerGetTick(); UWBOneSecondTask(); uwbsend[0]=0x55; @@ -885,6 +921,7 @@ phy_rx_ant_mode_set(RX_ANT_PORTS_COMBINATION); #endif // Set calibration parameters +// config.phy_cfg.ch_num=g_com_map[NEARBASE_ID1]; uwb_calibration_params_set(config.phy_cfg.ch_num); #ifndef STS_MODE // set advanced parameters @@ -899,7 +936,7 @@ struct PHY_ADV_CONFIG_T adv_config = { .thres_fap_detect = 40, .nth_scale_factor = 4, - .ranging_performance_mode = 3, + .ranging_performance_mode = 0, .skip_weakest_port_en = 0, }; #endif @@ -921,218 +958,243 @@ #endif mac_register_process_handler(tx_int_callback, rx_int_callback);//初始化回调 } -//主函数绑定接受逻辑 -int UwbSearch(void) -{ - uint8_t i; - uint16_t tempid; - // The following peripherals will be initialized in the uwb_open function - // phy/mac/aes/lsp/phy timers initialized - uwb_open(); - #ifdef STS_MODE - // Set STS key and IV - phy_sts_key_configure(&sts_iv_key); - - // which RX ports will be used for AoA/PDoA - phy_rx_ant_mode_set(RX_ANT_PORTS_COMBINATION); - #endif - // Set calibration parameters - uwb_calibration_params_set(config.phy_cfg.ch_num); +////主函数绑定接受逻辑 +//int UwbSearch(void) +//{ +// uint8_t i; +// uint16_t tempid; +// // The following peripherals will be initialized in the uwb_open function +// // phy/mac/aes/lsp/phy timers initialized +// uwb_open(); +// #ifdef STS_MODE +// // Set STS key and IV +// phy_sts_key_configure(&sts_iv_key); +// +// // which RX ports will be used for AoA/PDoA +// phy_rx_ant_mode_set(RX_ANT_PORTS_COMBINATION); +// #endif +// // Set calibration parameters +// uwb_calibration_params_set(config.phy_cfg.ch_num); - #ifndef STS_MODE - // set advanced parameters - struct PHY_ADV_CONFIG_T adv_config = { - .thres_fap_detect = 40, - .nth_scale_factor = 4, - .ranging_performance_mode = 0, - .skip_weakest_port_en = 0, - }; - #else - // set advanced parameters - struct PHY_ADV_CONFIG_T adv_config = { - .thres_fap_detect = 40, - .nth_scale_factor = 4, - .ranging_performance_mode = 3, - .skip_weakest_port_en = 0, - }; - #endif - phy_adv_params_configure(&adv_config); +// #ifndef STS_MODE +// // set advanced parameters +// struct PHY_ADV_CONFIG_T adv_config = { +// .thres_fap_detect = 40, +// .nth_scale_factor = 4, +// .ranging_performance_mode = 0, +// .skip_weakest_port_en = 0, +// }; +// #else +// // set advanced parameters +// struct PHY_ADV_CONFIG_T adv_config = { +// .thres_fap_detect = 40, +// .nth_scale_factor = 4, +// .ranging_performance_mode = 3, +// .skip_weakest_port_en = 0, +// }; +// #endif +// phy_adv_params_configure(&adv_config); - // uwb configure - uwb_configure(config.phy_work_mode, board_param.tx_power_fcc[CALIB_CH(config.phy_cfg.ch_num)], &config.phy_cfg); - - #ifdef STS_MODE - ranging_lib_init(); - #endif - ranging_frame_type_set(config.phy_cfg.sts_pkt_cfg); - - #ifdef STS_MODE - aoa_aux_info_set(AOA_AUX_ANT_IQ_RSSI_PDOA_AOA_FOM); - aoa_steering_vector_set((const float *)((uint32_t)((config.phy_cfg.ch_num == 9) ? svec_ch9_ptr : svec_ch5_ptr) | SRAM_BASE)); +// // uwb configure +// uwb_configure(config.phy_work_mode, board_param.tx_power_fcc[CALIB_CH(config.phy_cfg.ch_num)], &config.phy_cfg); +// +// #ifdef STS_MODE +// ranging_lib_init(); +// #endif +// ranging_frame_type_set(config.phy_cfg.sts_pkt_cfg); +// +// #ifdef STS_MODE +// aoa_aux_info_set(AOA_AUX_ANT_IQ_RSSI_PDOA_AOA_FOM); +// aoa_steering_vector_set((const float *)((uint32_t)((config.phy_cfg.ch_num == 9) ? svec_ch9_ptr : svec_ch5_ptr) | SRAM_BASE)); - aoa_param_config(); - - phy_rx_sts_switch_mode_set(config.phy_cfg.sts_pkt_cfg, STS_SWITCH_EVERY_4SYM, 0, 0); - #endif - // Register rx interrupt callback function - mac_register_process_handler(tx_int_callback, rx_int_callback); - - receive_flag = 0; - temp_count3=phy_timer_count_get(); - gpio_pin_set(SCL_PIN); - sts_lsp_store(); - flag_temp2=uwb_rx(0, 0, RX_SYNC_WIN_US_TEMP);//开启接收 - start_receive_count=phy_timer_count_get(); - poll_timeout=US_TO_PHY_TIMER_COUNT(2000000);//多一个多0.4ms默认0.4ms计算为0.125*4*100000,默认开启1mss - end_receive_count=start_receive_count+poll_timeout; - if(end_receive_count>=UINT32_MAX) - { - end_receive_count-=UINT32_MAX; - } - current_count=phy_timer_count_get(); - while(current_count<end_receive_count||current_count>end_receive_count+HALF_SECOND_TIME)//循环接受包体,若为124.8K则是+62400000 - { - while(mac_is_busy()) - { - IdleTask(); - current_count=phy_timer_count_get(); - if(current_count>end_receive_count&¤t_count<end_receive_count+HALF_SECOND_TIME) - { - break; - } - } - sts_lsp_store_stop(); - - - temp_count2=phy_timer_count_get(); - if(receive_flag==1)//成功接收 - { -// if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL&&!memcmp(&rx_buf[TAG_ID_IDX],&g_com_map[BIND_DEV_ID],2))//判断是否是和自己是同一组通讯的且为poll包 - if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)//判断是否是和自己是同一组通讯的且为poll包 - { - sleep_timer_start(__MS_TO_32K_CNT(UWB_DELAY_TIME_US-13));//测试 - range_timeout_us=20000;//将下次range开启后超时时间设为20ms之后再range里恢复 - temp_count2=phy_timer_count_get(); - frame_seq_nb2 = rx_buf[SEQUENCE_IDX];//获取包序 - battary = rx_buf[BATTARY_IDX]; - rec_nearbase_num=rx_buf[FZ_NEARBASENUM_INDEX]; //标签传过来的他与基站交互的基站id数目 - memcpy(&tag_id_recv,&rx_buf[TAG_ID_IDX],2); - memcpy(rec_ancidlist,&rx_buf[FZ_NEARBASEID_INDEX],2*rec_nearbase_num); - memcpy(rec_ancdistlist,&rx_buf[FZ_NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num); - memcpy(&rec_antdelay,&rx_buf[FZ_NEARBASEID_INDEX+rec_nearbase_num*4],2); - for(i=0; i<rec_nearbase_num; i++) - { - if(rec_ancidlist[i] == dev_id) - { - temp_recdist_before_offset=rec_ancdistlist[i]; - rec_ancdistlist[i]+=(int16_t)g_com_map[DIST_OFFSET]; - PushAnchorDataArray(tag_id_recv,rec_ancdistlist[i],battary); - } - } - for(i=0; i<rec_nearbase_num; i++) - { - memcpy(&tempid,&rx_buf[FZ_NEARBASEID_INDEX+i*2],2); - if(tempid==dev_id)//也是比id如果有就更新没有就抢占 - { - seize_anchor=0; //非抢占。已存在列表中 - Anchor_RecNearPoll(i); - break; - } - } +// aoa_param_config(); +// +// phy_rx_sts_switch_mode_set(config.phy_cfg.sts_pkt_cfg, STS_SWITCH_EVERY_4SYM, 0, 0); +// #endif +// // Register rx interrupt callback function +// mac_register_process_handler(tx_int_callback, rx_int_callback); +// +// receive_flag = 0; +// temp_count3=phy_timer_count_get(); +// gpio_pin_set(SCL_PIN); +// sts_lsp_store(); +// flag_temp2=uwb_rx(0, 0, RX_SYNC_WIN_US_TEMP);//开启接收 +// start_receive_count=phy_timer_count_get(); +// poll_timeout=US_TO_PHY_TIMER_COUNT(2000000);//多一个多0.4ms默认0.4ms计算为0.125*4*100000,默认开启1mss +// end_receive_count=start_receive_count+poll_timeout; +// if(end_receive_count>=UINT32_MAX) +// { +// end_receive_count-=UINT32_MAX; +// } +// current_count=phy_timer_count_get(); +// while(current_count<end_receive_count||current_count>end_receive_count+HALF_SECOND_TIME)//循环接受包体,若为124.8K则是+62400000 +// { +// while(mac_is_busy()) +// { +// IdleTask(); +// current_count=phy_timer_count_get(); +// if(current_count>end_receive_count&¤t_count<end_receive_count+HALF_SECOND_TIME) +// { +// break; +// } +// } +// sts_lsp_store_stop(); +// +// +// temp_count2=phy_timer_count_get(); +// if(receive_flag==1)//成功接收 +// { +//// if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL&&!memcmp(&rx_buf[TAG_ID_IDX],&g_com_map[BIND_DEV_ID],2))//判断是否是和自己是同一组通讯的且为poll包 +// if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)//判断是否是和自己是同一组通讯的且为poll包 +// { +// sleep_timer_start(__MS_TO_32K_CNT(UWB_DELAY_TIME_US-13));//测试 +// range_timeout_us=20000;//将下次range开启后超时时间设为20ms之后再range里恢复 +// temp_count2=phy_timer_count_get(); +// frame_seq_nb2 = rx_buf[SEQUENCE_IDX];//获取包序 +// battary = rx_buf[BATTARY_IDX]; +// rec_nearbase_num=rx_buf[FZ_NEARBASENUM_INDEX]; //标签传过来的他与基站交互的基站id数目 +// memcpy(&tag_id_recv,&rx_buf[TAG_ID_IDX],2); +// memcpy(rec_ancidlist,&rx_buf[FZ_NEARBASEID_INDEX],2*rec_nearbase_num); +// memcpy(rec_ancdistlist,&rx_buf[FZ_NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num); +// memcpy(&rec_antdelay,&rx_buf[FZ_NEARBASEID_INDEX+rec_nearbase_num*4],2); +// for(i=0; i<rec_nearbase_num; i++) +// { +// if(rec_ancidlist[i] == dev_id) +// { +// temp_recdist_before_offset=rec_ancdistlist[i]; +// rec_ancdistlist[i]+=(int16_t)g_com_map[DIST_OFFSET]; +// PushAnchorDataArray(tag_id_recv,rec_ancdistlist[i],battary); +// } +// } +// for(i=0; i<rec_nearbase_num; i++) +// { +// memcpy(&tempid,&rx_buf[FZ_NEARBASEID_INDEX+i*2],2); +// if(tempid==dev_id)//也是比id如果有就更新没有就抢占 +// { +// seize_anchor=0; //非抢占。已存在列表中 +// Anchor_RecNearPoll(i); +// break; +// } +// } - if(i==rec_nearbase_num) - { - seize_anchor=1; //抢占anchor - Anchor_RecNearPoll(i); - } - - gpio_pin_clr(SCL_PIN);//测试 - LOG_INFO(TRACE_MODULE_APP,"标签ID:%X,距离: %d 信号强度ANT0:%f,信号强度ANT2: %f\r\n",g_com_map[BIND_DEV_ID],distance,sts_rssi[0],sts_rssi[2]); - return 1;//返回发送成功标志 - } +// if(i==rec_nearbase_num) +// { +// seize_anchor=1; //抢占anchor +// Anchor_RecNearPoll(i); +// } +// +// gpio_pin_clr(SCL_PIN);//测试 +// LOG_INFO(TRACE_MODULE_APP,"标签ID:%X,距离: %d 信号强度ANT0:%f,信号强度ANT2: %f\r\n",g_com_map[BIND_DEV_ID],distance,sts_rssi[0],sts_rssi[2]); +// return 1;//返回发送成功标志 +// } - } - temp_count3=phy_timer_count_get(); - sts_lsp_store(); - flag_temp2=uwb_rx(0, 0, RX_SYNC_WIN_US_TEMP);//再次开启接收 - } - delay_us(2); - sts_lsp_store_stop(); - uwb_rx_force_off(1); - // LOG_INFO(TRACE_MODULE_APP,"超时定时器:%x,%x,%x\r\n",start_receive_count,end_receive_count,current_count); - gpio_pin_clr(SCL_PIN);//测试 - return 0;//返回绑定失败标志 -} +// } +// temp_count3=phy_timer_count_get(); +// sts_lsp_store(); +// flag_temp2=uwb_rx(0, 0, RX_SYNC_WIN_US_TEMP);//再次开启接收 +// } +// delay_us(2); +// sts_lsp_store_stop(); +// uwb_rx_force_off(1); +// // LOG_INFO(TRACE_MODULE_APP,"超时定时器:%x,%x,%x\r\n",start_receive_count,end_receive_count,current_count); +// gpio_pin_clr(SCL_PIN);//测试 +// return 0;//返回绑定失败标志 +//} //} #define SEARCH_TIMESTEMP 20 -void UWBPoll(void) -{ - switch(UWB_work_state) - { - case LINK_SUCCESS: - { //连接成功进行轮询测距 +//void UWBPoll(void) +//{ +// switch(UWB_work_state) +// { +// case LINK_SUCCESS: +// { //连接成功进行轮询测距 - uwb_led_on(); - UwbRange(); - uwb_led_off(); +// uwb_led_on(); +// UwbRange(); +// uwb_led_off(); - } - break; - case SEARCH_DEV: - { - UWB_work_state=LINK_SUCCESS; - Uwb_init(); -// //接包不成功或者通讯失败进入搜索模式 -// if(search_open_flag) +// } +// break; +// case SEARCH_DEV: +// { +// UWB_work_state=LINK_SUCCESS; +// Uwb_init(); +//// //接包不成功或者通讯失败进入搜索模式 +//// if(search_open_flag) +//// { +//// LOG_INFO(TRACE_MODULE_APP,"开启搜索\r\n"); +//// search_open_flag=0; +//// uwb_led_on(); +//// link_success_flag=UwbSearch();//第一次开启接收2s绑定失败后则进行下面1分钟后重新开启2s绑定流程 +//// uwb_led_off(); +//// if(link_success_flag) +//// UWB_work_state=LINK_SUCCESS; +//// }else{ +//// LOG_INFO(TRACE_MODULE_APP,"等待进入搜索模式:%d\r\n",SEARCH_TIMESTEMP-uwb_searchcount); +//// } + +// } +// break; +// case UN_BIND: +// { +// uwb_led_off();//关闭uwb指示灯 +// } +// break; +// } +// if(UWB_work_state==LINK_SUCCESS) +// { //成功时清0错误计数 +// uwb_searchcount=0; +// } +// if(UWB_work_state==SEARCH_DEV) +// { +// if(!search_open_flag) // { -// LOG_INFO(TRACE_MODULE_APP,"开启搜索\r\n"); -// search_open_flag=0; -// uwb_led_on(); -// link_success_flag=UwbSearch();//第一次开启接收2s绑定失败后则进行下面1分钟后重新开启2s绑定流程 -// uwb_led_off(); -// if(link_success_flag) -// UWB_work_state=LINK_SUCCESS; -// }else{ -// LOG_INFO(TRACE_MODULE_APP,"等待进入搜索模式:%d\r\n",SEARCH_TIMESTEMP-uwb_searchcount); +// if(uwb_searchcount++>SEARCH_TIMESTEMP) +// { +// uwb_searchcount=0; +// search_open_flag=1; +// } // } +// //link_error_count+=g_com_map[COM_INTERVAL]; +// //if(link_error_count>=g_com_map[4G_INTERNAL]) +// //link_error_count=0; +// // update_led_power_state();//更新灯状态 +// } +// //LOG_INFO(TRACE_MODULE_APP,"UWB状态:%d\r\n",UWB_work_state); +//} - } - break; - case UN_BIND: - { - uwb_led_off();//关闭uwb指示灯 - } - break; - } - if(UWB_work_state==LINK_SUCCESS) - { //成功时清0错误计数 - uwb_searchcount=0; - } - if(UWB_work_state==SEARCH_DEV) - { - if(!search_open_flag) - { - if(uwb_searchcount++>SEARCH_TIMESTEMP) - { - uwb_searchcount=0; - search_open_flag=1; - } - } - //link_error_count+=g_com_map[COM_INTERVAL]; - //if(link_error_count>=g_com_map[4G_INTERNAL]) - //link_error_count=0; - // update_led_power_state();//更新灯状态 - } - //LOG_INFO(TRACE_MODULE_APP,"UWB状态:%d\r\n",UWB_work_state); -} - -uint8_t GetUWBBindState(void) +//uint8_t GetUWBBindState(void) +//{ +// if(UWB_work_state == UN_BIND) +// { +// return 0; +// } +// return 1; +//} +void Tag_App(void)//发送模式(TAG标签) { - if(UWB_work_state == UN_BIND) - { - return 0; - } - return 1; + + //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 +// } +// } +// error_times = 0; +// SwitchTagState(); +// userkey_state = !GET_USERKEY; +// dwt_entersleep(); } + -- Gitblit v1.9.3