From 9aa8760604c398bc3a7a19b26c9e06de776f11df Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期四, 29 五月 2025 18:13:05 +0800 Subject: [PATCH] 完成免布线标签地板基本测试,修改串口为串口0,有修改为功率固件flag因中断多次触发问题,未加防抖保护,升级未测试 --- keil/uwb_app.c | 33 +++++++++++++++++++++++++++------ 1 files changed, 27 insertions(+), 6 deletions(-) diff --git a/keil/uwb_app.c b/keil/uwb_app.c index 5aa320d..d07374d 100644 --- a/keil/uwb_app.c +++ b/keil/uwb_app.c @@ -469,6 +469,7 @@ { tagid_list[j]=tagid_list[i]; tagdist_list[j] = tagdist_list[i]; + anchordata_bat[j]=anchordata_bat[i];//电量随之更新 tagofflinetime[j++]=tagofflinetime[i]; } } @@ -476,6 +477,7 @@ } uint8_t position; +extern uint8_t change_buffer_flag; uint8_t Anchor_RecNearPoll(uint8_t ancrec_nearbasepos)//根据自己是否为新基站定制消息去发送,根据是否抢占判断 { temp_count2=poll_rx_en_start_u32; @@ -484,7 +486,11 @@ memcpy(&send_buffer[ANCHOR_ID_IDX],&dev_id,2);//自身id memcpy(&send_buffer[TAG_ID_IDX],&tag_id_recv,2);//接受者id send_buffer[MESSAGE_TYPE_IDX]=MBX_RESPONSE; - + if(change_buffer_flag) + { + send_buffer[MESSAGE_CONTROL_TYPE_FLAG]=1; + change_buffer_flag=0; + } // if(rec_nearbase_num == ancrec_nearbasepos)//抢占模式自己为新基站 // { // random_time = (phy_timer_count_get()%100);//多基站抢占一个位置时避免一个也收不到的情况就每一个随机错开几十uS @@ -508,6 +514,7 @@ temp_count3= phy_timer_count_get(); flag_temp2=uwb_tx(send_buffer, 40,1 ,resp_tx_en_start_u32);//立即发送测试size大小 tagofflinetime[taglist_pos] = 0;//更新标签通信 + memset( send_buffer,0,40);//多加清除数组逻辑 // temp_count1=phy_timer_count_get(); //while(mac_is_busy()); //gpio_pin_clr(SCL_PIN); @@ -547,7 +554,7 @@ &&!((end_receive_count-current_count_calibration<=MS_TO_PHY_TIMER_COUNT(200))||(end_receive_count+(UINT32_MAX-current_count_calibration)<=MS_TO_PHY_TIMER_COUNT(200)))) { start_receive_count_calibration=current_count_calibration;//更新开始时间 -// MotorPoll(); + if(secondtask_search_count++%2==0) { @@ -570,17 +577,23 @@ } } uint16_t g_com_receive_id; +typedef enum +{UWB_UNLINE=0, + VOLTAGE_NORMAL, + VOLTAGE_ABNORMAL, +} UWB_State; +UWB_State Voltage_State=UWB_UNLINE; void CloseUWB(void) { uwb_rx_force_off(1); uwb_rx_flag=0; - LOG_INFO(TRACE_MODULE_APP,"关闭uwb_rx\r\n"); + //LOG_INFO(TRACE_MODULE_APP,"关闭uwb_rx\r\n"); } void OpenUWB(void) { flag_temp1=uwb_rx(0, 0,range_timeout_us);//提交接收请求 uwb_rx_flag=1; - LOG_INFO(TRACE_MODULE_APP,"打开uwb_rx\r\n"); + //LOG_INFO(TRACE_MODULE_APP,"打开uwb_rx\r\n"); } void UWBOneSecondTask(void) { @@ -603,12 +616,12 @@ // switch(wltag_state) // { // case RANGE: -// if(HIDO_TimerGetTick()-wltag_uwbtimer>0&&uwb_rx_flag==0) +// if(HIDO_TimerGetTick()-wltag_uwbtimer>2&&uwb_rx_flag==0) // { // wltag_uwbtimer = HIDO_TimerGetTick(); // OpenUWB(); // } -// else if(HIDO_TimerGetTick()-wltag_uwbtimer>2&&uwb_rx_flag==1) +// else if(HIDO_TimerGetTick()-wltag_uwbtimer>1&&uwb_rx_flag==1) // { // wltag_uwbtimer = HIDO_TimerGetTick(); // CloseUWB(); @@ -650,6 +663,12 @@ { flag_recsuccess = 1; wltag_state=RANGE;//成功后从search切换为range memcpy(&g_com_receive_id,&rx_buf[TAG_ID_IDX],2); + if(rx_buf[BATTARY_IDX]) + { + Voltage_State=VOLTAGE_NORMAL; + }else{ + Voltage_State=VOLTAGE_ABNORMAL; + } //temp_count2=phy_timer_count_get(); uwb_losttimer=0;//成功测距清0 lost时间 frame_seq_nb2 = rx_buf[SEQUENCE_IDX];//获取包序 @@ -693,10 +712,12 @@ { Anchor_RecNearPoll(i); tagdist_list[taglist_pos]=rec_ancdistlist[i]; + anchordata_bat[taglist_pos] = battary;//保存该基站电量 if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中 { //tempid==dev_id 说明基站下发测距报文有这个标签的信息 taglist_num++; //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况 tagid_list[taglist_pos] = tag_id_recv; + } break; } -- Gitblit v1.9.3