From a146034365a3ae06d9e4310a40c3857fcf4cc2ff Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期四, 18 七月 2024 18:14:22 +0800 Subject: [PATCH] 1.29,开放看门狗 --- Src/main.c | 358 ++++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 229 insertions(+), 129 deletions(-) diff --git a/Src/main.c b/Src/main.c index 29e458e..dcf75a3 100644 --- a/Src/main.c +++ b/Src/main.c @@ -39,6 +39,7 @@ #include "syn6288.h" #include "dw_mbx_tag.h" #include "GPS.h" +#include "lora.h" #define NSH1 0x0001 #define GP 0x0002 #define FLASH_HARDWARE_VERSION_MAP (uint32_t)0x08004F00 //硬件版本号和批次信息位置 @@ -46,11 +47,11 @@ uint8_t chongqi_flag; uint32_t uwbled,gpsled,loraled,powerled; UART_WakeUpTypeDef Selection; -uint8_t Close_RMC[20]="$CCMSG,RMC,1,0,*04\r\n"; -uint8_t Close_GSA[20]="$CCMSG,GSA,1,0,*0D\r\n"; -uint8_t Close_GSV[20]="$CCMSG,GSV,1,0,*1A\r\n"; -uint8_t Close_GLL[20]="$CCMSG,GLL,1,0,*1F\r\n"; -uint8_t Close_TXT[20]="$CCMSG,TXT,1,0,*00\r\n"; +uint8_t Close_RMC[100]="$CCMSG,RMC,1,0,*04\r\n$CCMSG,GSA,1,0,*0D\r\n$CCMSG,GSV,1,0,*1A\r\n$CCMSG,GLL,1,0,*1F\r\n$CCMSG,TXT,1,0,*00\r\n"; +//uint8_t Close_GSA[20]="$CCMSG,GSA,1,0,*0D\r\n"; +//uint8_t Close_GSV[20]="$CCMSG,GSV,1,0,*1A\r\n"; +//uint8_t Close_GLL[20]="$CCMSG,GLL,1,0,*1F\r\n"; +//uint8_t Close_TXT[20]="$CCMSG,TXT,1,0,*00\r\n"; /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -86,6 +87,8 @@ SPI_HandleTypeDef hspi1; +TIM_HandleTypeDef htim6; + /* USER CODE BEGIN PV */ /* USER CODE END PV */ @@ -101,12 +104,14 @@ static void MX_SPI1_Init(void); static void MX_LPUART1_UART_Init(void); static void MX_USART5_UART_Init(void); +static void MX_TIM6_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ +extern uint8_t shengji_flag; uint32_t dev_id; uint16_t heartbeat_timer,poll_timer,sync_timer; uint8_t aRxBuffer[1],group_id; @@ -123,7 +128,7 @@ uint8_t anjian_flag; uint8_t stationary_flag; uint16_t stationary_num; -uint8_t recv_end_time; +uint16_t recv_end_time,ledon_time; u16 GetLPTime(void) { u16 count=HAL_LPTIM_ReadCounter(&hlptim1); @@ -205,13 +210,19 @@ extern uint8_t xie_flag; float motor_keeptime; void IdleTask(void) -{ +{uint16_t current_lptime = GetLPTime(); + if(current_lptime-ledon_time>100||current_lptime<ledon_time-500) + { + // Set4LEDColor(0,0,0,0); + Set4LEDColor_Off(); + } if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) { state5v=1; LoraInit(); HAL_UART_DMAStop(&hlpuart1); // 停止DMA传输,防止 while(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) { + HAL_IWDG_Refresh(&hiwdg); UART_CheckReceive(); UART_CheckSend(); nomove_count = 0; @@ -243,6 +254,10 @@ { SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader } + if(memcmp(g_com_map2,g_com_map,COM_MAP_SIZE)!=0) + { + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; + } } @@ -290,7 +305,8 @@ u8 active_flag,nomovesleeptime; void Program_Init(void) -{ float temp; +{ + float temp; uint16_t temp2; uint16_t i; Usart1ParseDataCallback = UsartParseDataHandler; @@ -299,7 +315,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)|1; + g_com_map[VERSION] = (1<<8)|29; // g_com_map[DEV_ID]=1158; // #ifdef DEBUG_MODE // // g_com_map[GROUP_ID]=21; @@ -308,7 +324,7 @@ // // g_com_map[MAX_REPORT_ANC_NUM]=1; // // g_com_map[NOMOVESLEEP_TIME]=10; // #endif - g_com_map[GROUP_ID]=1; + g_com_map[GROUP_ID]=0; // g_com_map[COM_INTERVAL] = 1000; if(g_com_map[COM_INTERVAL]<1000) {g_com_map[COM_INTERVAL] = 1000;} @@ -339,6 +355,10 @@ { g_com_map[COM_INTERVAL]=1000; } + if(g_com_map[LORA_POWER]>22) + { + g_com_map[LORA_POWER] = 22; + } if(module_power>67) {module_power=67;} if(module_power<0) @@ -419,28 +439,42 @@ HAL_ADC_DeInit(&hadc); HAL_ADCEx_DisableVREFINT(); } +extern u8 gps_chafenlingqi; uint16_t irq_num; +u8 lora_irq_flag,lora_working_flag; void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == RADIO_DIO1_Pin) { - SystemClock_Config(); - irq_num++; + + // SystemClock_Config(); + // irq_num++; + lora_irq_flag = 1; + if(shengji_flag) RadioIrqProcess(); } if(GPIO_Pin == GPIO_PIN_1)//按键 { - SystemClock_Config(); + // SystemClock_Config(); anjian_flag=1; } if(GPIO_Pin == GPIO_PIN_0)//加速度 { - SystemClock_Config(); + // SystemClock_Config(); if(chongqi_flag==1) { HAL_NVIC_SystemReset(); } nomove_count = 0; + } + if(GPIO_Pin == GPIO_PIN_9)//UWB + { + if(!HAL_GPIO_ReadPin( RADIO_NSS_GPIO_Port, RADIO_NSS_Pin)) + { + gps_chafenlingqi++; + return; + } + MbxTagUwbRec(); } } extern void Lora_tx_zubao( void ); @@ -453,7 +487,6 @@ extern uint8_t GPSchangdu; uint8_t no_yingdaflag; -extern uint8_t GPS_GGAdate[200]; uint8_t GPS_GGAdate111[200]="报警"; @@ -463,32 +496,17 @@ } void GPS_Close_Init() { - - Delay_Ms(100); - HAL_UART_Transmit(&hlpuart1,Close_RMC,20,1000); -// Delay_Ms(100); - HAL_UART_Transmit(&hlpuart1,Close_RMC,20,1000); -// Delay_Ms(100); - HAL_UART_Transmit(&hlpuart1,Close_GSA,20,1000); -// Delay_Ms(100); - HAL_UART_Transmit(&hlpuart1,Close_GSV,20,1000); -// Delay_Ms(100); - HAL_UART_Transmit(&hlpuart1,Close_GLL,20,1000); -// Delay_Ms(100); - HAL_UART_Transmit(&hlpuart1,Close_TXT,20,1000); - Delay_Ms(100); + HAL_UART_Transmit_DMA(&hlpuart1,Close_RMC,100); + Delay_Ms(150); } +#define GPS_SIZE 400 extern uint16_t Lora_rece_error; extern uint16_t Beepchixutime; -#define BleRxBufferSize 1 -uint8_t aRxBuffer[1],group_id,GPSRxBuffer[BleRxBufferSize]; -uint8_t ble_rx_success_flag; +uint8_t group_id; uint8_t fangzhijinrushuimian_flag; -uint8_t GPSchangdu; -uint8_t GPS_GGAdate[200]; -uint8_t GPS_GGAdatenum; -void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) -{ +uint8_t GPS_GGAdate[GPS_SIZE]; +//void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +//{ // { // GPS_RecvFsm(GPSRxBuffer[0]); // GPS_Recv_Poll(GPSRxBuffer[0]); @@ -503,11 +521,11 @@ // } // HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)GPSRxBuffer, 1); // } -} -uint8_t ble_rxdate111[3]={0x11,0x22,0x33}; -void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart) -{ - SystemClock_Config(); +//} +//uint8_t ble_rxdate111[3]={0x11,0x22,0x33}; +//void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart) +//{ +// SystemClock_Config(); // HAL_UART_Transmit(&hlpuart1,(uint8_t*)ble_rxdate111,3,1000); //// huart->RxState = HAL_UART_STATE_BUSY_RX; // ble_rxzhongzhuandate[ble_zhongzhuannum]=BleRxBuffer[0]; @@ -519,15 +537,15 @@ // memset(ble_rxzhongzhuandate,0,sizeof(ble_rxzhongzhuandate)); // } // if(lp_time>3) - if(HAL_UART_Receive_DMA(&hlpuart1,GPS_GGAdate, LPUART_SIZE)) - { - Error_Handler(); - } - fangzhijinrushuimian_flag=1; +// if(HAL_UART_Receive_DMA(&hlpuart1,GPS_GGAdate, LPUART_SIZE)) +// { +// Error_Handler(); +// } +// fangzhijinrushuimian_flag=1; // HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)GPSRxBuffer, 1); // HAL_UART_Transmit(&hlpuart1,ble_rxdate,2,1000); -} +//} extern uint8_t yuyin_no_sleep_flag; extern uint8_t yuyin_sendflag; extern uint8_t xiafayuyin_data[200]; @@ -538,17 +556,9 @@ if(yuyin_sendflag) { yuyin_sendflag=0; - // SYN_FrameInfo(0,yuyin_yinliang);//设置音量等级V10 SYN_FrameInfo(0,xiafayuyin_data); //播放内容 -// HAL_UART_Receive_IT(&huart6, &Get_Uart6_data, 1); memset(xiafayuyin_data,0,sizeof(xiafayuyin_data)); } -// if(Get_Uart6_data==0x4F) -// { -//HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); -//HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_RESET); -// Get_Uart6_data=0; -// } } void PowerDownDetect(void) { @@ -572,10 +582,14 @@ } } } +uint8_t only_one_flag; uint8_t gotosleep_flag; uint8_t usart5_state,flag_onesecond; void Jingzhi_Poll(void) { + if(only_one_flag==0) + { + only_one_flag=1; powerled=LEDOFF; loraled=LEDOFF; gpsled=LEDOFF; @@ -592,6 +606,7 @@ Set4LEDColor_Off(); //关led总电源 chongqi_flag=1; + } } void OneSecondTask(void) { @@ -604,47 +619,44 @@ uint8_t GPS_Close_flag=1; uint8_t debugnum; uint8_t Lora_send_flag; +extern uint8_t rec_secdelay; +extern u16 uwb_rx_remaintime_ms; void Lora_Send_Poll(void) { - if(Lora_send_flag) - { -// memset(GPS_GGAdate,0,100); -// HAL_UART_Receive_DMA(&hlpuart1,GPS_GGAdate, LPUART_SIZE); - -// GPS_Close_time++; -// if(GPS_Close_time>5&&GPS_Close_flag) -// { -// GPS_Close_flag=0; -// GPS_Close_Init(); -//HAL_UART_Receive_DMA(&hlpuart1, (uint8_t *)GPS_GGAdate, 1); -// } -// if(GPS_Close_flag==0) -// HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)GPSRxBuffer, 1); - debugnum++; - Lora_send_flag=0; -// LedTask(); - loraled=BLUE; + + if(Lora_send_flag&&uwb_rx_remaintime_ms==0) + { + debugnum++; + Lora_send_flag=0; +// if(rec_secdelay>0) +// { +// loraled=YELLOW; +// rec_secdelay--; +// return; +// } + loraled=BLUE; LoraReportPoll(); flag_onesecond = 1; - } + } } -extern volatile uint8_t rx_len ; //接收一帧数据的长度 +extern volatile uint16_t rx_len ; //接收一帧数据的长度 extern volatile uint8_t recv_end_flag; //一帧数据接收完成标志 void Lpuart_rx_Poll(void) { -if(recv_end_flag == 1) //接收完成标志 -{ - recv_end_time=0; -GPS_ParseGGA(GPS_GGAdate, rx_len); -//HAL_UART_Transmit_DMA(&hlpuart1, GPS_GGAdate,rx_len); -memset(GPS_GGAdate,0,rx_len); -rx_len = 0;//清除计数 -recv_end_flag = 0;//清除接收结束标志位 -fangzhijinrushuimian_flag=0; -//HAL_UART_Receive_DMA(&hlpuart1,GPS_GGAdate,LPUART_SIZE);//重新打开DMA接收 -} - + if(recv_end_flag == 1) //接收完成标志 + { + uint16_t i; + recv_end_time=0; + for(i=0;i<GPS_SIZE;i++) + {GPS_RecvFsm(GPS_GGAdate[i]);} + //GPS_ParseGGA(GPS_GGAdate, rx_len); + memset(GPS_GGAdate,0,GPS_SIZE); + rx_len = 0;//清除计数 + recv_end_flag = 0;//清除接收结束标志位 + fangzhijinrushuimian_flag=0; + } + HAL_UART_Receive_DMA(&hlpuart1,GPS_GGAdate,LPUART_SIZE);//重新打开DMA接收 } /* USER CODE END 0 */ @@ -678,19 +690,21 @@ MX_GPIO_Init(); MX_DMA_Init(); MX_ADC_Init(); - MX_IWDG_Init(); + // MX_IWDG_Init(); MX_LPTIM1_Init(); MX_USART1_UART_Init(); MX_SPI1_Init(); MX_LPUART1_UART_Init(); MX_USART5_UART_Init(); + MX_TIM6_Init(); /* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); //开GPS电源 delay_ms(10); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); //开uwb电源 Program_Init(); + MX_IWDG_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 #ifdef _USE_BAR -BarInit(); +//BarInit(); #endif Dw1000_Init(); dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN); @@ -702,7 +716,7 @@ Set4LEDColor_Off(); HAL_Delay(500); LoraInit(); - +// delay_ms(1000); bat_percent=Get_Battary(); GPS_Close_flag=0; GPS_Close_Init(); @@ -710,12 +724,13 @@ { Error_Handler(); } - HAL_UART_Receive_DMA(&hlpuart1,GPS_GGAdate,LPUART_SIZE);//重新打开DMA接收 +// HAL_UART_Receive_DMA(&hlpuart1,GPS_GGAdate,LPUART_SIZE);//重新打开DMA接收 __HAL_UART_ENABLE_IT(&hlpuart1, UART_IT_IDLE); //使能IDLE中断 if(HAL_UART_Receive_DMA(&huart1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE)) { Error_Handler(); } + HAL_TIM_Base_Start_IT(&htim6); /* USER CODE END 2 */ /* Infinite loop */ @@ -728,16 +743,26 @@ if(gotosleep_flag==1) { Jingzhi_Poll(); +// HAL_IWDG_Refresh(&hiwdg); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); } else { +// HAL_IWDG_Refresh(&hiwdg); + if(lora_irq_flag) + { + lora_irq_flag = 0; + lora_working_flag = 1; + RadioIrqProcess(); + lora_working_flag = 0; + } Lpuart_rx_Poll(); OneSecondTask(); IdleTask(); PowerDownDetect(); Lora_Send_Poll(); TTSchaxun_Busy(); + LoraUp_Poll(); // #ifndef DEBUG_MODE // if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)) // { @@ -1103,6 +1128,44 @@ } /** + * @brief TIM6 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM6_Init(void) +{ + + /* USER CODE BEGIN TIM6_Init 0 */ + + /* USER CODE END TIM6_Init 0 */ + + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM6_Init 1 */ + + /* USER CODE END TIM6_Init 1 */ + htim6.Instance = TIM6; + htim6.Init.Prescaler = 32-1; + htim6.Init.CounterMode = TIM_COUNTERMODE_UP; + htim6.Init.Period = 1000-1; + htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim6) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM6_Init 2 */ + + /* USER CODE END TIM6_Init 2 */ + +} + +/** * Enable DMA controller clock */ static void MX_DMA_Init(void) @@ -1212,18 +1275,18 @@ GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /*Configure GPIO pins : PC9 RADIO_DIO1_Pin */ + GPIO_InitStruct.Pin = GPIO_PIN_9|RADIO_DIO1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /*Configure GPIO pins : PA8 PA12 PA15 */ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_12|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /*Configure GPIO pin : RADIO_DIO1_Pin */ - GPIO_InitStruct.Pin = RADIO_DIO1_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(RADIO_DIO1_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : INPUT_5V_Pin */ GPIO_InitStruct.Pin = INPUT_5V_Pin; @@ -1295,42 +1358,79 @@ yuyin_no_sleep_flag=0; } } +#define NOGPS_RESET_TIME 300 +u8 state_count = 0; +extern u8 lora_jianting_flag,seq_num; +extern u32 wg_lost_count; +extern u16 uwb_rx_remaintime_ms; void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim) { -// uint8_t pinlv; - SystemClock_Config(); - HAL_IWDG_Refresh(&hiwdg); -Set4LEDColor(powerled,loraled,gpsled,uwbled); -Bat_Percent_Poll(); + if(chongqi_flag==0&&shengji_flag==0) + { +// SystemClock_Config(); + Set4LEDColor(uwbled,gpsled,loraled,powerled); //代码有BUG需要执行2次,否则电源灯不亮 + Set4LEDColor(uwbled,gpsled,loraled,powerled); + //Set4LEDColor(powerled,loraled,gpsled,uwbled); + ledon_time = GetLPTime(); + Bat_Percent_Poll(); if(state5v==0) { - if(yuyin_no_sleep_flag==0) - { - recv_end_time++; - if(recv_end_time>3) - {HAL_NVIC_SystemReset();} + if(yuyin_no_sleep_flag==0) + { + recv_end_time++; + if(recv_end_time>NOGPS_RESET_TIME) + {HAL_NVIC_SystemReset();} + } + Yuying_Poll(); + switch(state_count) + { + case 0: + state_count = 1; + if(lora_jianting_flag) + { + uwb_rx_remaintime_ms = 990; + UWB_RXStart(0); + }else{ + seq_num--; + Lora_send_flag=1; + } + break; + case 1: + if(wg_lost_count>0) + { + seq_num--; + Lora_send_flag=1; + } + state_count = 2; + break; + case 2: + Lora_send_flag=1; + state_count = 0; + break; + default: + state_count = 0; + } + 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; + } } - Yuying_Poll(); - Lora_send_flag=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; - } - } - powerled=LEDOFF; - loraled=LEDOFF; - gpsled=LEDOFF; - uwbled=LEDOFF; -Set4LEDColor_Off(); -//delay_ms(10); +// powerled=LEDOFF; +// loraled=LEDOFF; +// gpsled=LEDOFF; +// uwbled=LEDOFF; +// Set4LEDColor_Off(); + } } /* USER CODE END 4 */ -- Gitblit v1.9.3