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 | 87 ++++++++++++++++++++++++++++++++----------- 1 files changed, 64 insertions(+), 23 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 24336ea..8be9910 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -139,22 +139,29 @@ 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(TTS_ENABLE,0); + PCA9555_Set_One_Value_Output(GPS_POWER,0);//关闭gps +// PCA9555_Set_One_Value_Output(TTS_ENABLE,0); - PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G - - sleep_timer_stop(); - +// gpio_pin_get_val(PCA_INPUT_DETECT); +// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭4G AT+CPOWD + + sleep_timer_stop(); +// delay_ms(1); + if(!gpio_pin_get_val(PCA_INPUT_DETECT)) + { + return; + } //adc_close(); power_enter_power_down_mode(1); + // LOG_INFO(TRACE_MODULE_APP, "从休眠出来\r\n"); sys_reset(0); int_unlock(lock); @@ -207,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) @@ -221,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) @@ -338,7 +354,7 @@ HIDO_TimerTick(); // if(nomove_count<=g_com_map[NOMOVESLEEP_TIME])//防止溢出 nomove_count++; - gaodu=GetPressAndHeight()*100; +// gaodu=GetPressAndHeight()*100; // else{ // nomove_count=g_com_map[NOMOVESLEEP_TIME]+1; // } @@ -564,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)|25; + g_com_map[VERSION] = (1<<8)|30; LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); @@ -575,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) { @@ -711,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); + } } @@ -917,7 +958,7 @@ IIC2_Init(); Accelerometer_Init(); // delay_ms(100); - BarInit(); +// BarInit(); // delay_ms(100); // gaodu=GetPressAndHeight(); PCA9555_init(); @@ -1005,7 +1046,7 @@ PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 pca_input_detection_init(pca_handler);//pca检测输入 - gaodu=GetPressAndHeight()*100; +// gaodu=GetPressAndHeight()*100; while (1) { -- Gitblit v1.9.3