From cae9d270866f095318e8c31ea7c4a8fe741f465d Mon Sep 17 00:00:00 2001 From: yincheng.zhong <634916154@qq.com> Date: 星期日, 03 三月 2024 22:20:31 +0800 Subject: [PATCH] 增加激活状态,休眠状态,静止休眠功能 --- Src/main.c | 140 ++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 120 insertions(+), 20 deletions(-) diff --git a/Src/main.c b/Src/main.c index a70a3c9..d7288a7 100644 --- a/Src/main.c +++ b/Src/main.c @@ -38,11 +38,12 @@ #include <stdlib.h> #include <Lora.h> #include "radio.h" +#include "dps310.h" #include "dw_mbx_tag.h" #define NSH1 0x0001 #define GP 0x0002 #define FLASH_HARDWARE_VERSION_MAP (uint32_t)0x08004F00 //硬件版本号和批次信息位置 -#define DEBUG_MODE +//#define DEBUG_MODE UART_WakeUpTypeDef Selection; /* USER CODE END Includes */ @@ -246,7 +247,7 @@ hardware_pici = STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP+2); hardware_type = STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP+4); //deca_sleep(1000); - g_com_map[VERSION] = (1<<8)|3; + g_com_map[VERSION] = (1<<8)|5; // g_com_map[DEV_ID]=1158; g_com_map[GROUP_ID]=0; // g_com_map[COM_INTERVAL] = 1000; @@ -254,9 +255,10 @@ { g_com_map[COM_INTERVAL] = 1000; } + g_com_map[STATIONARY_TIME] = 10; active_flag = g_com_map[ACTIVE_INDEX]; module_power = g_com_map[POWER]; - g_com_map[IMU_ENABLE] = 0; +// g_com_map[IMU_ENABLE] = 0; imu_enable=g_com_map[IMU_ENABLE]; motor_enable=g_com_map[MOTOR_ENABLE]; @@ -464,7 +466,6 @@ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); /* USER CODE BEGIN Init */ @@ -480,14 +481,13 @@ /* Initialize all configured peripherals */ MX_GPIO_Init(); - MX_USART1_UART_Init(); MX_SPI1_Init(); MX_ADC_Init(); - -// MX_IWDG_Init(); +// MX_DMA_Init(); + MX_IWDG_Init(); MX_TIM2_Init(); - // MX_LPUART1_UART_Init(); + MX_LPUART1_UART_Init(); MX_LPTIM1_Init(); /* USER CODE BEGIN 2 */ LED2_TB_ON; @@ -504,10 +504,13 @@ Delay_Ms(10); usart_send[0]=0x55; usart_send[1]=0xaa; - bat_percent=Get_VDDVlotage(); + HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)GPSRxBuffer, 1); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); //开GPS电源 LoraInit(); +#ifdef _USE_BAR + BarInit(); +#endif // Delay_Ms(1000); // HAL_UART_Transmit(&hlpuart1,Close_RMC,22,1000); // HAL_UART_Transmit(&hlpuart1,Close_GSA,22,1000); @@ -532,8 +535,8 @@ IdleTask(); #ifndef DEBUG_MODE -if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) - HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); + if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) + HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); #endif } @@ -621,7 +624,7 @@ hadc.Init.OversamplingMode = DISABLE; hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; hadc.Init.Resolution = ADC_RESOLUTION_12B; - hadc.Init.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + hadc.Init.SamplingTime = ADC_SAMPLETIME_160CYCLES_5; hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ContinuousConvMode = DISABLE; @@ -640,7 +643,7 @@ } /** Configure for the selected ADC regular channel to be converted. */ - sConfig.Channel = ADC_CHANNEL_VREFINT; + sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { @@ -1027,40 +1030,137 @@ /*Enter the Standby mode*/ HAL_PWR_EnterSTANDBYMode(); } + extern uint8_t tx_near_msg[80]; float key_keeptime; extern float freqlost_count,range_lost_time; extern uint8_t lora_yingda_flag; extern uint32_t wg_lost_count; -uint8_t lora_yingdatime; +uint8_t lora_yingdatime,gotosleep_flag,sleep_flag; extern uint8_t lora_chongfuyingda_flag,report_ancnum; uint16_t no_data_chongqi_num; uint16_t anchor_send_num; -uint8_t no_yingdatime; +uint8_t no_yingdatime,tflag1,tflag2; +extern uint16_t tagdist_list[ANC_MAX_NUM]; void LedTask(void) { if(report_ancnum>0) { LED2_TB_ON; +#ifdef _SMT_TEST + tflag1 = 1; + printf("测距值%d\r\n",tagdist_list[0]); +#endif } - // if(wg_lost_count<=1) + if(wg_lost_count<=1) { +#ifdef _SMT_TEST + tflag2 = 1; + printf("网关通讯正常\r\n"); +#endif LED_TB_ON; } if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) if(bat_percent<15) { LED_TR_ON; + } else { + LED2_TB_ON; } - + } void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim) { // uint8_t pinlv; SystemClock_Config(); - LedTask(); - LoraReportPoll(); - flag_onesecond = 1; + HAL_IWDG_Refresh(&hiwdg); + if(active_flag==0) //未激活状态 + { + if(!GET_USERKEY) + { + LED_TB_ON; + key_keeptime+=1; + if(key_keeptime>3) + { + u8 i=250,keystate=1; + while(i--) + { + if(i%10==0) + { + LED_TB_BLINK; + } + if(GET_USERKEY) + { + keystate = 0; + } + if(keystate==0&&!GET_USERKEY) + { + parameter_init(); + g_com_map[ACTIVE_INDEX] = 1; + save_com_map_to_flash(); + delay_ms(100); + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader + } + delay_ms(10); + } + } + } else { + // LED_LG_OFF; + key_keeptime=0; + } + + } else { + if(!sleep_flag) + { + LedTask(); + LoraReportPoll(); + flag_onesecond = 1; + + if(nomove_count++>g_com_map[STATIONARY_TIME]) + { + stationary_flag = 1; + } else { + stationary_flag = 0; + } + if(nomove_count>=g_com_map[NOMOVESLEEP_TIME]-1&&imu_enable) + { + gotosleep_flag=1; + } else { + gotosleep_flag=0; + } + } +#ifndef DEBUG_MODE + if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&imu_enable) + { + if(sleep_flag==0) + { + Radio.Standby(); + Radio.Sleep(); + sleep_flag = 1; + } + + } else { + if(sleep_flag) + { + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; + } + + } + +#endif + + } + if(!GET_USERKEY) //长按重启逻辑 + { + key_keeptime+=1; + if(key_keeptime>=KEY_KEEPRESET_TIME) + { + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; + } + } else { + key_keeptime=0; + } + LED_TB_OFF; LED_TR_OFF; LED2_TB_OFF; -- Gitblit v1.9.3