From 8ce130f6cc614e60783c162153dc438ee43ad460 Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期五, 17 九月 2021 16:52:43 +0800
Subject: [PATCH] V2.26
---
源码/核心板/Src/main.c | 169 ++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 110 insertions(+), 59 deletions(-)
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
index a145aa0..7e1f98c 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c"
@@ -21,13 +21,14 @@
Nvic_Init();
// Systick_Init();
TIM3_Int_Init();
- Led_Init();
+
Beep_Init();
DW_GPIO_Init();
Uart1_Init();
+ Uart2_Init();
Spi_Init();
ADC_Configuration();
-
+ Led_Init();
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
}
u8 anchor_type;
@@ -46,6 +47,31 @@
}
u16 tyncpoll_time;
u16 slottime,max_slotpos;
+extern u8 module_power;
+extern u16 total_slotnum;
+void ComMapCheck(void)
+{
+ if(g_com_map[COM_INTERVAL]<10)
+ {
+ g_com_map[COM_INTERVAL]=500;
+ }
+ if(g_com_map[COM_INTERVAL]>1000)
+ {
+ g_com_map[COM_INTERVAL]=1000;
+ }
+ if(module_power>MAX_RFPOWER)
+ {module_power=MAX_RFPOWER;}
+ if(module_power<0)
+ {module_power=0;}
+// if(g_com_map[MAX_REPORT_ANC_NUM]>10)
+// {g_com_map[MAX_REPORT_ANC_NUM]=10;}
+// if(g_com_map[MAX_REPORT_ANC_NUM]<1)
+// {g_com_map[MAX_REPORT_ANC_NUM]=1;}
+ if(g_com_map[IMU_THRES]>10)
+ {g_com_map[IMU_THRES]=10;}
+ if(g_com_map[IMU_THRES]<1)
+ {g_com_map[IMU_THRES]=1;}
+}
void Program_Init(void)
{ float temp;
u16 temp2;
@@ -61,38 +87,46 @@
// g_com_map[MAX_REPORT_ANC_NUM]=3;
// g_com_map[NEARBASE_NUM]=1;
// g_com_map[NEARBASE_ID1]=2;
- g_com_map[ANC_FLAG]=1;
- save_com_map_to_flash();
+// g_com_map[ANC_FLAG]=1;
+// save_com_map_to_flash();
+ g_com_map[BASESYNCSEQ]=1;
+ g_com_map[SYNCBASEID]=1;
#endif
OUT485_ENABLE;
- g_com_map[VERSION] = 0x0112;
+ ComMapCheck();
+ g_com_map[VERSION] = 0x021a;
dev_id = g_com_map[DEV_ID];
- slottime=ceil((double)g_com_map[MAX_REPORT_ANC_NUM]/4)+4;
+ slottime=ceil((double)g_com_map[MAX_REPORT_ANC_NUM]*SLOT_SCALE)+3;
max_slotpos=g_com_map[COM_INTERVAL]/slottime;
tyncpoll_time=(g_com_map[DEV_ID]%max_slotpos)*slottime;
+ module_power = g_com_map[POWER];
+ total_slotnum = 1000/g_com_map[COM_INTERVAL];
+ anchor_type = dev_id%3;
+
+
+ if(g_com_map[DEV_ROLE])
+ {
+ printf("标签ID: %d .\r\n",dev_id);
+ printf("通讯间隔: %d ms.\r\n",g_com_map[COM_INTERVAL]);
+ printf("单次通讯基站数量: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]);
+ }else{
-// if(g_com_map[DEV_ROLE])
-// {
-// printf("标签ID: %d .\r\n",dev_id);
-// printf("通讯间隔: %d ms.\r\n",g_com_map[COM_INTERVAL]);
-// printf("单次通讯基站数量: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]);
-// }else{
-//
-// anchor_type = dev_id%g_com_map[MAX_REPORT_ANC_NUM];
-// printf("基站ID: %x .\r\n",dev_id);
-// printf("基站类型: %c .\r\n",anchor_type+0x41);
-// printf("单次通讯基站数量: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]);
-// }
+ printf("基站ID: %x .\r\n",dev_id);
+ printf("基站类型: %c .\r\n",anchor_type+0x41);
+ printf("单次通讯基站数量: %d个.\r\n",g_com_map[MAX_REPORT_ANC_NUM]);
+ }
OUT485_DISABLE;
// printf("DEVICE PAIRID: %d .\r\n",g_com_map[PAIR_ID]);
// printf("DEVICE ALARM DISTANCE: 1.%d 2.%d 3.%d .\r\n",g_com_map[ALARM_DISTANCE1],g_com_map[ALARM_DISTANCE2],g_com_map[ALARM_DISTANCE3]);
-
+ memcpy(g_com_map2,g_com_map,COM_MAP_SIZE);
for(i=0;i<255;i++)
{
- g_Tagdist[i]=0xffff;
+ g_Tagdist[i]=0x1ffff;
+ IdleTask();
}
+
}
/*! ------------------------------------------------------------------------------------------------------------------
@@ -104,8 +138,25 @@
*
* @return none
*/
+extern float GetPressAndHeight(void);
+extern u16 synclost_count;
+extern float Height;
+int32_t intheight;
void HeatBeat(void)
-{
+{ u16 checksum;
+ GetPressAndHeight();
+ intheight = Height*100;//+g_com_map[MAX_REPORT_ANC_NUM];
+ if(synclost_count>5)
+ {
+ hbsend[6] = 0;
+ }else{
+ hbsend[6] = 1;
+ }
+ if(intheight!=0)
+ intheight+=(int16_t)g_com_map[MAX_REPORT_ANC_NUM];
+ memcpy(&hbsend[7],&intheight,4);
+checksum = Checksum_u16(&hbsend[2],12);
+memcpy(&hbsend[14],&checksum,2);
UART_PushFrame(hbsend,16);
}
extern u8 g_start_sync_flag,usart_send_flag,anc_report_num;
@@ -114,31 +165,42 @@
extern u8 flag_newsecond, tagpos_rec[50], tagpos_send[50],ancidlist_num;
uint32_t tagpos_binary;
extern u16 ancidlist_rec[20],ancidlist_send[20];
+extern u16 target_time;
void IdleTask(void)
{
- main_logic();
- UART_CheckReceive();
- UART_CheckSend();
- if(heartbeat_timer>1000)
+
+ UART_CheckReceive();
+ UART_CheckSend();
+ UART2_CheckReceive();
+
+// if( memcmp(g_com_map2,g_com_map,COM_MAP_SIZE)!=0)
+// {
+// SendAnchorState(SM_MAPERROR);
+// delay_ms(100);
+// SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
+// }
+ if(heartbeat_timer>60000)
{
heartbeat_timer=0;
if(g_com_map[HEARTBEAT]&&g_com_map[DEV_ROLE]==0)
HeatBeat();
}
- if(flag_newsecond)
- {
- flag_newsecond=0;
- tagpos_binary=0;
- memcpy(ancidlist_send,ancidlist_rec,ancidlist_num*2);
- ancidlist_num=0;
- for(u8 i=0;i<max_slotpos;i++)
- {
- if(tagpos_rec[i])
- tagpos_binary|=1<<i;
- tagpos_rec[i] = 0;
- }
- }
-
+// if(flag_newsecond)
+// {
+// flag_newsecond=0;
+// tagpos_binary=0;
+// memcpy(ancidlist_send,ancidlist_rec,ancidlist_num*2);
+// ancidlist_num=0;
+// for(u8 i=0;i<max_slotpos;i++)
+// {
+// if(tagpos_rec[i])
+// tagpos_binary|=1<<i;
+// tagpos_rec[i] = 0;
+// }
+// }
+ if(target_time>1000)
+ {target_time-=1000;}
+ #ifdef USART_INTEGRATE_OUTPUT
if(g_com_map[DEV_ROLE]==0&&usart_send_flag)
{u16 checksum;
usart_send_flag=0;
@@ -149,23 +211,11 @@
UART_PushFrame(usart_send_anc,6+anc_report_num*6);
anc_report_num=0;
}
- if(g_com_map[CNT_UPDATE]==1)
- {
- uint32_t result = 0;
- u16 tmp = 0xAAAA;
- __disable_irq();
- result = FLASH_Prepare(0x8004A38, 2);
- if(result)
- result = FLASH_Write(0x8004A38, (const uint8_t*)&tmp, 2);
- __enable_irq();
- printf("进入升级模式\r\n");
- g_com_map[CNT_UPDATE]=0;
- save_com_map_to_flash();
- delay_ms(100);
- // STMFLASH_Write_NoCheck(0x8004A38,0xAAAA);
- // Delay_ms(100);
- SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
- }
+ #endif
+ if(g_com_map[MAP_SIGN_INDEX]!=0x55AA)
+ {
+ SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
+ }
}
int main(void)
@@ -174,7 +224,8 @@
Device_Init();
Program_Init();
Dw1000_Init();
- delay_ms(10);
+ BarInit();
+ delay_ms(10);
Dw1000_App_Init();
/* Loop forever initiating ranging exchanges. */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
@@ -182,7 +233,7 @@
usart_send[1]=0xAA;
usart_send_anc[0]=0x55;
usart_send_anc[1]=0xAA;
-
+ //SendComMap(50, 0);
while(1)
{
g_start_sync_flag=0;
@@ -192,7 +243,7 @@
Tag_App();
}
IdleTask();
-if(g_com_map[DEV_ROLE]==0)
+if(g_com_map[DEV_ROLE]!=1)
Anchor_App();
}
--
Gitblit v1.9.3