From 6ae3d4efdc752bb9ae0758b54ddf00d3af761f39 Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期六, 05 七月 2025 14:44:19 +0800 Subject: [PATCH] V1.30修改了5V输入,反复插拔串口导致的死机问题,现在是关闭所有电源之后,延时200ms的之后才会拉低电源,保留串口DEBUG能看到看门狗的复位日志输出 --- keil/include/main/main.c | 91 +++++++++++++++++++++++++++++++-------------- 1 files changed, 63 insertions(+), 28 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 0abb809..8be9910 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -139,21 +139,22 @@ uint8_t onlyoneflag=1; void mcu_deep_sleep(void) { - + // char str[19]= {"AT+POWERMODE=ST\r\n"}; uint32_t lock; + // uart_send(UART_ID0, str,19, NULL); trace_flush(); lock = int_lock(); // LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n"); // gps_air780_power_change(0,0);//关闭gps,4G PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED - PCA9555_Set_One_Value_Output(GPS_POWER,0);//关闭gps,4G + PCA9555_Set_One_Value_Output(GPS_POWER,0);//关闭gps // PCA9555_Set_One_Value_Output(TTS_ENABLE,0); // gpio_pin_get_val(PCA_INPUT_DETECT); - PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G - +// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭4G AT+CPOWD + sleep_timer_stop(); -// delay_ms(200); +// delay_ms(1); if(!gpio_pin_get_val(PCA_INPUT_DETECT)) { return; @@ -213,7 +214,7 @@ uint32_t keystarttime,keystarttime2,keystarttime3; extern uint32_t get_in_num,get_out_num; uint8_t flag_4G_recdata; -uint8_t ledonflag; +uint8_t ledonflag,_4gclose_flag; uint32_t ledontime; extern uint8_t flag_first_TCPconnect; void IMUTask(void) @@ -227,17 +228,26 @@ userkey_state=4; heartbeasend_flag = 1; sleepflag=1; - + sleepflagtime=HIDO_TimerGetTick(); } } if(sleepflag) { - if(HIDO_TimerGetTick() - sleepflagtime>3) - { - power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)PCA_INPUT_DETECT, POWER_WAKEUP_LEVEL_LOW); - mcu_deep_sleep(); - } + if(HIDO_TimerGetTick() - sleepflagtime>1) + { + if(!_4gclose_flag) + { + _4gclose_flag = 1; + PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); + } + } + + if(HIDO_TimerGetTick() - sleepflagtime>3) + { + power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)PCA_INPUT_DETECT, POWER_WAKEUP_LEVEL_LOW); + mcu_deep_sleep(); + } } } void powerON_Task(void) @@ -570,7 +580,7 @@ // } g_com_map[MODBUS_MODE] = 0; log_4g_enable_flag=g_com_map[LOG_4G_ENABLE]; - g_com_map[VERSION] = (1<<8)|27; + g_com_map[VERSION] = (1<<8)|30; LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); @@ -581,6 +591,11 @@ LOG_INFO(TRACE_MODULE_APP,"设备UWB工作间隔: %x .\r\n",g_com_map[UWBFrequency]); LOG_INFO(TRACE_MODULE_APP,"设备GPS工作间隔: %x .\r\n",g_com_map[GPSFrequency]); LOG_INFO(TRACE_MODULE_APP,"当前GPS工作波特率: %d .\r\n",gpsbaudrate1); + #ifdef _4G_115200 + LOG_INFO(TRACE_MODULE_APP,"当前4G波特率: 115200.\r\n"); + #else + LOG_INFO(TRACE_MODULE_APP,"当前4G波特率: 9600.\r\n"); + #endif // LOG_INFO(TRACE_MODULE_APP,"充电是否开机标志位: %d .\r\n",g_com_map[URT_BQ]); if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) { @@ -673,8 +688,8 @@ HIDO_TimerPoll(); HIDO_ATLitePoll(); TCPClient_Poll(); -// if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) -// {TCPClient_Poll_1();} + if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) + {TCPClient_Poll_1();} if(flag_secondtask) { flag_secondtask = 0; @@ -717,19 +732,39 @@ } else { - if(state5v==1) +// if(state5v==1) +// { +// g_com_map[MODBUS_MODE] = 0; +// state5v=0; +// state5V_prase_flag=state5v; +// gps_prase_flag=1;//恢复gps解析 +// uart1_change_from_debug_to_gps();//测试 +// // PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS +// PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED +// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); +// PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS +// PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭 +// delay_us(1000000); +// +// } + if(state5v==1) { g_com_map[MODBUS_MODE] = 0; state5v=0; state5V_prase_flag=state5v; - gps_prase_flag=1;//恢复gps解析 - uart1_change_from_debug_to_gps();//测试 - // PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS +// gps_prase_flag=1;//恢复gps解析 +// uart1_change_from_debug_to_gps();//测试 + // PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS + //保留串口输出到debug口这样可以看到看门狗的复位 + //关闭电源前检查PCA输出脚的电平保证不供电在关闭电源脚 PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED + PCA9555_Set_One_Value_Output(TTS_ENABLE,0); PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS + delay_ms(200); + PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭 - delay_us(1000000); + } } @@ -960,10 +995,10 @@ // NTRIPClient_Init(); // NTRIPApp_Init(); // } -// if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) -// { -// TCPClient_Init_1(); -// } + if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) + { + TCPClient_Init_1(); + } // HTTPClient_Init(); wdt_open(WDT_ID0,&app_wdt_cfg);//30s检测喂狗 LED_output_init();//配置彩色灯引脚 @@ -1021,10 +1056,10 @@ HIDO_ATLitePoll(); TCPClient_Poll(); wdt_ping(WDT_ID0);//喂狗 -// if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) -// { -// TCPClient_Poll_1(); -// } + if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) + { + TCPClient_Poll_1(); + } if(flag_secondtask) { flag_secondtask = 0; -- Gitblit v1.9.3