From ba9bc95d95fbd04e34ca5d61677422d28c089bf8 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期五, 05 七月 2024 16:41:41 +0800 Subject: [PATCH] 1.25,修改后测试一天一夜已经 不死机。 --- Src/main.c | 364 +++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 265 insertions(+), 99 deletions(-) diff --git a/Src/main.c b/Src/main.c index eea73b7..9588cc5 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 //硬件版本号和批次信息位置 @@ -85,6 +86,9 @@ DMA_HandleTypeDef hdma_usart1_tx; SPI_HandleTypeDef hspi1; +SPI_HandleTypeDef hspi2; + +TIM_HandleTypeDef htim6; /* USER CODE BEGIN PV */ @@ -101,12 +105,15 @@ 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); +static void MX_SPI2_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 +130,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,7 +212,12 @@ 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(); @@ -243,6 +255,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 +306,8 @@ u8 active_flag,nomovesleeptime; void Program_Init(void) -{ float temp; +{ + float temp; uint16_t temp2; uint16_t i; Usart1ParseDataCallback = UsartParseDataHandler; @@ -299,7 +316,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] = (2<<8)|0; + g_com_map[VERSION] = (1<<8)|25; // g_com_map[DEV_ID]=1158; // #ifdef DEBUG_MODE // // g_com_map[GROUP_ID]=21; @@ -339,6 +356,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 +440,43 @@ HAL_ADC_DeInit(&hadc); HAL_ADCEx_DisableVREFINT(); } +extern u8 gps_chafenlingqi; uint16_t irq_num; +u8 lora_irq_flag,lora_working_flag; +//u8 uwb_irq_flag; void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == RADIO_DIO1_Pin) { - SystemClock_Config(); - irq_num++; - RadioIrqProcess(); + + // SystemClock_Config(); + irq_num++; + lora_irq_flag = 1; + // 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; +// } +// uwb_irq_flag = 1; + MbxTagUwbRec(); } } extern void Lora_tx_zubao( void ); @@ -465,17 +501,14 @@ 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[400]; -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]); @@ -490,11 +523,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]; @@ -506,15 +539,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]; @@ -551,10 +584,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; @@ -562,6 +599,7 @@ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET); //GuanGPS and lora 电源 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); //guan uwb 电源 HAL_SPI_DeInit(&hspi1); + HAL_SPI_DeInit(&hspi2); HAL_GPIO_WritePin( RADIO_NSS_GPIO_Port, RADIO_NSS_Pin,GPIO_PIN_RESET);//lora cs HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4,GPIO_PIN_RESET);//uwb cs HAL_GPIO_WritePin( GPIOC, GPIO_PIN_3,GPIO_PIN_RESET);//LORA REST @@ -571,6 +609,7 @@ Set4LEDColor_Off(); //关led总电源 chongqi_flag=1; + } } void OneSecondTask(void) { @@ -583,32 +622,43 @@ uint8_t GPS_Close_flag=1; uint8_t debugnum; uint8_t Lora_send_flag; +extern uint8_t rec_secdelay; void Lora_Send_Poll(void) { - if(Lora_send_flag) - { - debugnum++; - Lora_send_flag=0; - loraled=BLUE; + + if(Lora_send_flag) + { + debugnum++; + Lora_send_flag=0; + if(rec_secdelay>0) + { + loraled=YELLOW; + rec_secdelay--; + return; + } + loraled=BLUE; LoraReportPoll(); flag_onesecond = 1; - } + } } 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); -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 */ @@ -648,13 +698,23 @@ MX_SPI1_Init(); MX_LPUART1_UART_Init(); MX_USART5_UART_Init(); + MX_TIM6_Init(); + MX_SPI2_Init(); /* USER CODE BEGIN 2 */ + GPIO_InitTypeDef GPIO_InitStruct = {0}; HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); //开GPS电源 - delay_ms(10); + delay_ms(100); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); //开uwb电源 Program_Init(); + MX_IWDG_Init(); //看门狗务必放到开GPS电源开uwb电源后面,否则GPS工作不正常。 + HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET); + GPIO_InitStruct.Pin = GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); #ifdef _USE_BAR -BarInit(); +//BarInit(); #endif Dw1000_Init(); dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN); @@ -662,9 +722,9 @@ LIS3DH_Data_Init(); Set4LEDColor(RED,RED,RED,RED); - HAL_Delay(500); + delay_ms(100); Set4LEDColor_Off(); - HAL_Delay(500); + delay_ms(100); LoraInit(); // delay_ms(1000); bat_percent=Get_Battary(); @@ -680,6 +740,7 @@ { Error_Handler(); } + HAL_TIM_Base_Start_IT(&htim6); /* USER CODE END 2 */ /* Infinite loop */ @@ -692,16 +753,31 @@ 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; + } +// if(uwb_irq_flag) +// { +// MbxTagUwbRec(); +// uwb_irq_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)) // { @@ -1067,6 +1143,82 @@ } /** + * @brief SPI2 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI2_Init(void) +{ + + /* USER CODE BEGIN SPI2_Init 0 */ + + /* USER CODE END SPI2_Init 0 */ + + /* USER CODE BEGIN SPI2_Init 1 */ + + /* USER CODE END SPI2_Init 1 */ + /* SPI2 parameter configuration*/ + hspi2.Instance = SPI2; + hspi2.Init.Mode = SPI_MODE_MASTER; + hspi2.Init.Direction = SPI_DIRECTION_2LINES; + hspi2.Init.DataSize = SPI_DATASIZE_8BIT; + hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi2.Init.NSS = SPI_NSS_SOFT; + hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi2.Init.TIMode = SPI_TIMODE_DISABLE; + hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi2.Init.CRCPolynomial = 7; + if (HAL_SPI_Init(&hspi2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI2_Init 2 */ +__HAL_SPI_ENABLE(&hspi2); + /* USER CODE END SPI2_Init 2 */ + +} + +/** + * @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) @@ -1105,25 +1257,23 @@ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_7|GPIO_PIN_8, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOC, RADIO_NSS_Pin|RADIO_nRESET_Pin|GPIO_PIN_4, GPIO_PIN_SET); - - /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4|GPIO_PIN_8, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5 - |GPIO_PIN_7, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10|SCL_Pin|SDA_Pin|GPIO_PIN_6, GPIO_PIN_SET); + HAL_GPIO_WritePin(GPIOB, RADIO_NSS_Pin|RADIO_nRESET_Pin|SCL_Pin|SDA_Pin + |GPIO_PIN_6, GPIO_PIN_SET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12|GPIO_PIN_15, GPIO_PIN_RESET); - /*Configure GPIO pins : PC13 RADIO_NSS_Pin RADIO_nRESET_Pin PC4 - PC7 PC8 */ - GPIO_InitStruct.Pin = GPIO_PIN_13|RADIO_NSS_Pin|RADIO_nRESET_Pin|GPIO_PIN_4 - |GPIO_PIN_7|GPIO_PIN_8; + /*Configure GPIO pins : PC13 PC4 PC7 PC8 */ + GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_4|GPIO_PIN_7|GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; @@ -1142,9 +1292,9 @@ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /*Configure GPIO pins : PB0 PB2 PB10 PB4 + /*Configure GPIO pins : RADIO_NSS_Pin PB2 RADIO_nRESET_Pin PB4 PB5 PB6 PB7 */ - GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_10|GPIO_PIN_4 + GPIO_InitStruct.Pin = RADIO_NSS_Pin|GPIO_PIN_2|RADIO_nRESET_Pin|GPIO_PIN_4 |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; @@ -1176,18 +1326,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; @@ -1259,44 +1409,60 @@ yuyin_no_sleep_flag=0; } } +#define NOGPS_RESET_TIME 300 +u8 state_count = 0; 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(); + state_count++; + switch(state_count) + { + case 0: + + break; + case 1: + break; + case 2: + break; + } + 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; + } } - 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