From 526f2fbdaa4532c5bc0b6dffd7b9b84f784d7fef Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期一, 29 一月 2024 15:49:44 +0800
Subject: [PATCH] 1.76
---
源码/核心板/Src/application/dw_app.c | 187 +++++++++++++++++++++-------------------------
1 files changed, 84 insertions(+), 103 deletions(-)
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
index 8a69306..cf8745f 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c"
@@ -9,7 +9,7 @@
NEARPOLL,
}tag_state=NEARPOLL;
static dwt_config_t config = {
- 5, /* Channel number. */
+ 2, /* Channel number. */
DWT_PRF_64M, /* Pulse repetition frequency. */
DWT_PLEN_128, /* Preamble length. */
DWT_PAC8, /* Preamble acquisition chunk size. Used in RX only. */
@@ -128,8 +128,9 @@
/* Configure DW1000. See NOTE 6 below. */
dwt_configure(&config);//配置DW1000
- //dwt_setinterrupt(DWT_INT_TFRS | 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);
-
+
+
+
/* Apply default antenna delay value. See NOTE 1 below. */
dwt_setrxantennadelay(RX_ANT_DLY); //设置接收天线延迟
dwt_settxantennadelay(0); //设置发射天线延迟
@@ -186,7 +187,6 @@
dwt_forcetrxoff(); //关闭接收,以防在RX ON 状态
- tx_sync_msg[GROUP_ID_IDX] = group_id;
tx_sync_msg[SYNC_SEQ_IDX]=sync_seq;
memcpy(&tx_sync_msg[ANCHOR_ID_IDX],&sync_baseid,4);
dwt_writetxdata(sizeof(tx_sync_msg), tx_sync_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
@@ -216,13 +216,13 @@
u16 nearbaseid_list[MAX_NEARBASE_NUM],mainbase_id,true_nearbase_idlist[MAX_NEARBASE_NUM];
int32_t mainbase_dist,nearbase_distlist[MAX_NEARBASE_NUM],true_nearbase_distlist[MAX_NEARBASE_NUM],true_exsistbase_list[MAX_NEARBASE_NUM];
uint8_t trygetnearmsg_times;
-u16 current_slotnum,total_slotnum,target_time,last_time,record_time[10],record_i;
+u16 current_slotnum,total_slotnum,target_time,last_time;
u32 rec_tagpos_binary;
extern uint32_t tagpos_binary;
void SetNextPollTime(u16 time)
{
current_slotnum++;
- if(current_slotnum>=total_slotnum)
+ if(current_slotnum==total_slotnum)
current_slotnum-=total_slotnum;
//time=5;
target_time=((current_slotnum*g_com_map[COM_INTERVAL])+time);
@@ -239,11 +239,7 @@
{target_time-=1000;}
if(target_time<0)
{target_time+=1000;}
-record_time[record_i++]=target_time;
- if(record_i>=10)
- {
- record_i=0;
- }
+
}
u8 FindNearBasePos(u16 baseid)
{
@@ -426,7 +422,7 @@
memcpy(&tmp_time,&rx_buffer[ANCTIMEUS],2);
- //if(g_com_map[DEV_ROLE]!=0)
+ if(g_com_map[DEV_ROLE]!=0)
{
sync_timer=temp_sync_timer1;
//// memcpy(&tagslotpos,&rx_buffer[TAGSLOTPOS],2);
@@ -469,28 +465,24 @@
dwt_writetxdata(28+nearbase_num*4, tx_nearfinal_msg, 0);//将发送数据写入DW1000
dwt_writetxfctrl(28+nearbase_num*4, 0);//设定发送数据长度
memcpy(&rec_tagpos_binary,&rx_buffer[NEARMSG_EMPTYSLOTPOS_INDEX],4);
+ IWDG_Feed();
if(temp_dist!=0x1ffff)
{
g_Resttimer=0;
- IWDG_Feed();
+
#ifdef USART_SINGLE_OUTPUT
usart_send[2] = 1;//正常模式
usart_send[3] = 17;//数据段长度
usart_send[4] = frame_seq_nb;//数据段长度
- if(g_com_map[DEV_ROLE])
- {
+
memcpy(&usart_send[5],&dev_id,2);
memcpy(&usart_send[7],&rec_nearbaseid,2);
- }else{
- memcpy(&usart_send[5],&rec_nearbaseid,2);
- memcpy(&usart_send[7],&dev_id,2);
- }
+
memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4);
usart_send[13] = battary;
usart_send[14] = button;
checksum = Checksum_u16(&usart_send[2],17);
memcpy(&usart_send[19],&checksum,2);
- if(g_com_map[MODBUS_MODE]!=1)
UART_PushFrame(usart_send,21);
#endif
@@ -528,20 +520,15 @@
usart_send[2] = 1;//正常模式
usart_send[3] = 17;//数据段长度
usart_send[4] = frame_seq_nb;//数据段长度
- if(g_com_map[DEV_ROLE])
- {
+
memcpy(&usart_send[5],&dev_id,2);
memcpy(&usart_send[7],&rec_nearbaseid,2);
- }else{
- memcpy(&usart_send[5],&rec_nearbaseid,2);
- memcpy(&usart_send[7],&dev_id,2);
- }
+
memcpy(&usart_send[9],&rx_buffer[DIST_IDX],4);
usart_send[13] = battary;
usart_send[14] = button;
checksum = Checksum_u16(&usart_send[2],17);
memcpy(&usart_send[19],&checksum,2);
- if(g_com_map[MODBUS_MODE]!=1)
UART_PushFrame(usart_send,21);
#endif
@@ -723,7 +710,6 @@
{
//LED0_ON;
dwt_forcetrxoff();
- dwt_setinterrupt(DWT_INT_TFRS | 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);
GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);
switch(tag_state)
{
@@ -746,7 +732,7 @@
int8_t correction_time,new_tagid=0;
extern uint8_t sync_seq;
u16 taglist_num=0,taglist_pos;
-u16 tagid_list[TAG_NUM_IN_SYS],tagstate_list[TAG_NUM_IN_SYS];
+u16 tagid_list[TAG_NUM_IN_SYS],tagstate_list[TAG_NUM_IN_SYS];;
u8 tagofflinetime[TAG_NUM_IN_SYS];
int32_t tagdist_list[TAG_NUM_IN_SYS];
void TagListUpdate(void)
@@ -890,30 +876,41 @@
dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS+(rec_nearbase_num+1-ancrec_nearbasepos)*DELAY_BETWEEN_TWO_FRAME_UUS);//设置发送完成后开启接收延迟时间
dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//接收超时时间
- if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE1])
- {
- motorstate =0;
- }else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE2])
- {
- motorstate =2;
- }else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE3])
- {
- motorstate =1;
- }else{
- motorstate =0;
- }
- if(new_tagid)
- {
- tagdist_list[taglist_pos]=0x1ffff;
- memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
- }else{
- memcpy(&tx_nearresp_msg[DIST_IDX], &tagdist_list[taglist_pos], 4);
- }
+ if(tag_id_recv>>12!=9)
+ {
+ if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE1])
+ {
+ motorstate =0;
+ }else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE2])
+ {
+ motorstate =2;
+ }else if(tagdist_list[taglist_pos]<g_com_map[ALARM_DISTANCE3])
+ {
+ motorstate =1;
+ }else{
+ motorstate =0;
+ }
+ }else{
+ if(tagdist_list[taglist_pos]<g_com_map[RELAY2_DISTANCE1])
+ {
+ motorstate =0;
+ }else if(tagdist_list[taglist_pos]<g_com_map[RELAY2_DISTANCE2])
+ {
+ motorstate =2;
+ }else if(tagdist_list[taglist_pos]<g_com_map[RELAY2_DISTANCE3])
+ {
+ motorstate =1;
+ }else{
+ motorstate =0;
+ }
+ }
+
tx_nearresp_msg[GROUP_ID_IDX] = group_id;
tx_nearresp_msg[MAINBASE_INDEX]=flag_syncbase;
tx_nearresp_msg[MESSAGE_TYPE_IDX]=NEAR_RESPONSE;
- tx_nearresp_msg[MOTORSTATE_INDEX]=(remotesend_state<<4)|motorstate;
+ remotesend_state = 0;
+ tx_nearresp_msg[MOTORSTATE_INDEX]=(remotesend_state<<4)|(motorstate&0xf);
if(remotesend_state)
{
memcpy(&tx_nearresp_msg[REMOTEPARA_INDEX],remotetag_para,REMOTEPARA_LEN);
@@ -1008,7 +1005,7 @@
{
g_Tagdist[taglist_pos]=hex_dist/10;
}else{
- g_Tagdist[taglist_pos]= 1;
+ // g_Tagdist[taglist_pos]= 1;
}
#ifdef USART_SINGLE_OUTPUT
usart_send[2] = 1;//正常模式
@@ -1016,8 +1013,8 @@
usart_send[4] = frame_seq_nb2;//数据段长度
memcpy(&usart_send[5],&tag_id_recv,2);
memcpy(&usart_send[7],&dev_id,2);
- if(tagdist_list[taglist_pos]<=0)
- tagdist_list[taglist_pos]=10;
+ if(tagdist_list[taglist_pos]<=0)
+ tagdist_list[taglist_pos]=0x2ffff;
memcpy(&usart_send[9],&tagdist_list[taglist_pos],4);
usart_send[13] = battary;
usart_send[14] = button;
@@ -1027,12 +1024,12 @@
memcpy(&usart_send[19],&checksum,2);
if(g_com_map[MODBUS_MODE]!=1)
UART_PushFrame(usart_send,21);
- tagstate_list[taglist_pos] = button<<8|battary;
#else
memcpy(&usart_send_anc[4+6*anc_report_num],&tag_id_recv,2);
memcpy(&usart_send_anc[6+6*anc_report_num],&tagdist_list[taglist_pos],4);
anc_report_num++;
#endif
+ tagstate_list[taglist_pos] = (button<<8)|battary;
for(i=0;i<taglist_num-1;i++)
{
if( tagdist_list[i]>tagdist_list[i+1]&&tagdist_list[i+1]!=0)
@@ -1058,7 +1055,6 @@
Modbus_HoldReg[i*4+1] = tagstate_list[i];
memcpy(&Modbus_HoldReg[i*4+2],&tagdist_list[i],4);
}
-
}else{
// printf("%d",hex_dist);
misdist_num[taglist_pos]++;
@@ -1074,19 +1070,6 @@
extern u8 flag_syncbase;
u8 tagpos_rec[50],tagpos_send[50],ancidlist_num;
u16 ancidlist_rec[20],ancidlist_send[20],rec_ancidlist[20],rec_ancdistlist[20];
-void Anchor_Start(void)
-{
-
-dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
- g_start_sync_flag=0;
-dwt_setinterrupt(DWT_INT_TFRS | 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(1000);//设定接收超时时间,0位没有超时时间
- dwt_rxenable(0);//打开接收
-// while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误
-// {
-// //IdleTask();
-// };
-}
void Anchor_App(void)
{
@@ -1094,19 +1077,17 @@
u16 tempid;
uint32_t rec_syncid;
-// dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
-// g_start_sync_flag=0;
+ dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG);
+ g_start_sync_flag=0;
-// dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
-// dwt_rxenable(0);//打开接收
-//// GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);
-// while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误
-// {
-//
-// IdleTask();
-// };
- dwt_setinterrupt(DWT_INT_TFRS | 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);
- status_reg = dwt_read32bitreg(SYS_STATUS_ID);
+ dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
+ dwt_rxenable(0);//打开接收
+// GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET);
+ while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误
+ {
+
+ IdleTask();
+ };
//GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_RESET);
if (status_reg & SYS_STATUS_RXFCG)//成功接收
{ u16 tag_recv_interval;
@@ -1129,29 +1110,29 @@
// Anchor_RecPoll();
// break;
case SYNC:
- memcpy(&rec_syncid,&rx_buffer[ANCHOR_ID_IDX],4);
- if(rec_syncid<current_syncid)
- {
- current_syncid=rec_syncid;
- flag_syncbase=0;
- sync_seq=rx_buffer[SYNC_SEQ_IDX]+1;
- TIM3->CNT = sync_seq*325%1000+15;
- sync_timer = sync_seq*325/1000;
- synclost_timer=0;
- //SyncPoll(sync_seq,rec_syncid);
- }else if(rec_syncid==current_syncid)
- {
- if(rx_buffer[SYNC_SEQ_IDX]<sync_seq)
- {
- flag_syncbase=0;
- sync_seq=rx_buffer[SYNC_SEQ_IDX]+1;
- TIM3->CNT = sync_seq*325%1000+5;
- sync_timer = sync_seq*325/1000+995;
- synclost_timer=0;
- //SyncPoll(sync_seq,rec_syncid);
- }
-
- }
+// memcpy(&rec_syncid,&rx_buffer[ANCHOR_ID_IDX],4);
+// if(rec_syncid<current_syncid)
+// {
+// current_syncid=rec_syncid;
+// flag_syncbase=0;
+// sync_seq=rx_buffer[SYNC_SEQ_IDX]+1;
+// TIM3->CNT = sync_seq*325%1000+15;
+// sync_timer = sync_seq*325/1000;
+// synclost_timer=0;
+// //SyncPoll(sync_seq,rec_syncid);
+// }else if(rec_syncid==current_syncid)
+// {
+// if(rx_buffer[SYNC_SEQ_IDX]<sync_seq)
+// {
+// flag_syncbase=0;
+// sync_seq=rx_buffer[SYNC_SEQ_IDX]+1;
+// TIM3->CNT = sync_seq*325%1000+5;
+// sync_timer = sync_seq*325/1000+995;
+// synclost_timer=0;
+// //SyncPoll(sync_seq,rec_syncid);
+// }
+//
+// }
break;
case NEAR_MSG:
if(anc_id_recv==flag_syncbase)
@@ -1177,7 +1158,7 @@
memcpy(&tag_id_recv,&rx_buffer[TAG_ID_IDX],2);
memcpy(&rec_ancidlist,&rx_buffer[NEARBASEID_INDEX],2*rec_nearbase_num);
memcpy(&rec_ancdistlist,&rx_buffer[NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num);
- memcpy(&rec_antdelay,&rx_buffer[NEARBASEID_INDEX+nearbase_num*4],2);
+ memcpy(&rec_antdelay,&rx_buffer[NEARBASEID_INDEX+rec_nearbase_num*4],2);
#ifdef USART_ALL_OUTPUT
usart_send[2] = 0x0c;//正常模式
usart_send[3] = 8+rec_nearbase_num*4;//数据段长度
--
Gitblit v1.9.3