| | |
| | | #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; |
| | | |
| | |
| | | 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); |
| | |
| | | break; |
| | | }; |
| | | tagofflinetime[taglist_pos] = 0; |
| | | } |
| | | // printf("测距成功,序号%d,距离%d\r\n",frame_seq_nb2,tagdist_list[taglist_pos]); |
| | | // delay_ms(10); |
| | | } |
| | |
| | | uint32_t temp231; |
| | | extern uint32_t uwbled,gpsled,loraled,powerled; |
| | | uint32_t uwbdezhuangtai; |
| | | u8 uwb_rx_remaintime_ms,gps_chafenlingqi; |
| | | void MbxTagUwbRec(void) |
| | | { |
| | | |
| | |
| | | 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&¤t_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)//成功接收 |
| | | { |
| | |
| | | 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]; |
| | |
| | | } |
| | | } |
| | | 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; |
| | |
| | | #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) |
| | |
| | | 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; |
| | |
| | | |
| | | 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; |
| | | |