| | |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | // printf("设备ID: %x .\r\n",dev_id); |
| | | // printf("固件版本:定位标签-串口输出-随机时间片模式 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); |
| | | //g_com_map[NOMOVESLEEP_TIME]=5; |
| | | // 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]); |
| | | |
| | | |
| | | // 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]); |
| | | if(g_com_map[CNT_UPDATE]==1) |
| | | { |
| | | Set4LEDColor(RED,RED,RED,RED); |
| | | HAL_Delay(500); |
| | | Set4LEDColor(GREEN,GREEN,GREEN,GREEN); |
| | | HAL_Delay(500); |
| | | Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); |
| | | HAL_Delay(500); |
| | | uint32_t result = 0; |
| | | uint16_t tmp = 0xAAAA; |
| | | __disable_irq(); |
| | |
| | | if(result) |
| | | result = FLASH_Write(0x8004A38, (const uint8_t*)&tmp, 2); |
| | | __enable_irq(); |
| | | printf("进入升级模式\r\n"); |
| | | // 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 |
| | | // // STMFLASH_Write_NoCheck(0x8004A38,0xAAAA); |
| | | // // Delay_ms(100); |
| | | // SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader |
| | | NVIC_SystemReset(); |
| | | } |
| | | if(g_com_map[CNT_REBOOT]==1) |
| | | { |
| | |
| | | } |
| | | void Uwb_Poll(void) |
| | | { |
| | | if(nomove_flag==0) |
| | | if(nomove_flag==0)//静止判断 |
| | | { |
| | | if(lp_time-uwb_timer>=UWB_WORK_TIME_S) |
| | | if(lp_time-uwb_timer>=UWB_WORK_TIME_S) //是否到uwb工作时间了。 |
| | | { |
| | | uwbled=BLUE; |
| | | powerled=LEDOFF; |
| | |
| | | { |
| | | uwb_work_num=0; |
| | | } |
| | | if(uwb_work_num>5&&youxiao_ceju<3) |
| | | if(uwb_work_num>5&&youxiao_ceju<3)//判断uwb测距有效基站数量是否大于3个,并且超过5次的话GPS开始工作。 |
| | | {GPS_ON_flag=1;} |
| | | else |
| | | {GPS_ON_flag=0;} |
| | |
| | | Set4LEDColor_Off(); //关一下led总电源 |
| | | Power_GPS_LoraOff();//关一下GPS总电源 |
| | | // Lora_Sleep(); |
| | | Set4LEDColor(RED,RED,RED,RED); |
| | | HAL_Delay(500); |
| | | Set4LEDColor(GREEN,GREEN,GREEN,GREEN); |
| | | HAL_Delay(500); |
| | | Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); |
| | | HAL_Delay(500); |
| | | // Set4LEDColor(RED,RED,RED,RED); |
| | | // HAL_Delay(500); |
| | | // Set4LEDColor(GREEN,GREEN,GREEN,GREEN); |
| | | // HAL_Delay(500); |
| | | |
| | | // NVIC_SystemReset(); |
| | | /* USER CODE END 2 */ |
| | | |
| | | /* Infinite loop */ |
| | |
| | | while (1) |
| | | { |
| | | |
| | | APL_Poll(); |
| | | APL_Poll();//lora接收,gps接收时间判断,单片机休眠函数,蜂鸣器判断函数。 |
| | | Uwb_Poll(); |
| | | Battery_Poll(); |
| | | Time_to_restart_Poll(); |
| | | Battery_Poll();//检测电量函数,每60s测一次电量。 |
| | | Time_to_restart_Poll();//防止出现意外情况,或则不考虑翻转问提,20000000s重启一次设备。 |
| | | /* USER CODE END WHILE */ |
| | | |
| | | /* USER CODE BEGIN 3 */ |
| | |
| | | void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim) |
| | | { |
| | | lp_time++; |
| | | nomove_time++; |
| | | nomove_time++;//设备没有移动的时间 |
| | | if(nomove_time>g_com_map[NOMOVESLEEP_TIME]) |
| | | {nomove_flag=1;} |
| | | else |
| | | {nomove_flag=0;} |
| | | if(lora_sendfinal_rx_bag_flag==1) |
| | | if(lora_sendfinal_rx_bag_flag==1)//如果进入lora等待接收回复的状态 |
| | | { |
| | | lora_sendfinal_rx_time=lora_sendfinal_rx_time+1; |
| | | lora_sendfinal_rx_time=lora_sendfinal_rx_time+1;//lora等待接收2s,2s不休眠,如果超过两秒,标志位清零,进入修眠、 |
| | | if(lora_sendfinal_rx_time>=2) |
| | | { |
| | | lora_sendfinal_rx_time=0; |