From eeea481d10c49eeff6a2cafa9b49d4fce3ace8f8 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期五, 26 一月 2024 10:43:46 +0800
Subject: [PATCH] 1

---
 Src/main.c |  219 ++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 169 insertions(+), 50 deletions(-)

diff --git a/Src/main.c b/Src/main.c
index a3598de..b6895ec 100644
--- a/Src/main.c
+++ b/Src/main.c
@@ -40,6 +40,7 @@
 #define GP   0x0002
 #define FLASH_HARDWARE_VERSION_MAP		(uint32_t)0x08004F00    //硬件版本号和批次信息位置
 #define DEBUG_MODE
+UART_WakeUpTypeDef Selection;
 /* USER CODE END Includes */
 
 /* Private typedef -----------------------------------------------------------*/
@@ -65,11 +66,12 @@
 
 LPTIM_HandleTypeDef hlptim1;
 
-SPI_HandleTypeDef hspi1;
-
+UART_HandleTypeDef hlpuart1;
 UART_HandleTypeDef huart1;
 DMA_HandleTypeDef hdma_usart1_rx;
 DMA_HandleTypeDef hdma_usart1_tx;
+
+SPI_HandleTypeDef hspi1;
 
 /* USER CODE BEGIN PV */
 
@@ -84,6 +86,7 @@
 static void MX_ADC_Init(void);
 static void MX_DMA_Init(void);
 static void MX_IWDG_Init(void);
+static void MX_LPUART1_UART_Init(void);
 /* USER CODE BEGIN PFP */
 
 /* USER CODE END PFP */
@@ -387,13 +390,7 @@
 uint32_t temp;
 extern uint8_t sleep_flag,m_bEUARTTxEn;
 uint16_t waitusart_timer;
-//void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
-//{
-//  /* Set transmission flag: trasfer complete*/
-//  waitusart_timer = tag_frequency*USART_KEEPWAKE_TIME;
-//	
 
-//}
 void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
 {
 		//SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
@@ -547,6 +544,85 @@
 {
 MX_ADC_Init();
 }
+#define BleRxBufferSize 1
+uint8_t aRxBuffer[1],group_id,BleRxBuffer[BleRxBufferSize];
+uint8_t ble_rx_success_flag;
+uint8_t fangzhijinrushuimian_flag;
+uint8_t ble_rxzhongzhuandate[50];
+uint8_t ble_zhongzhuannum;
+uint8_t ble_rxdate[50]={1,2,3,4,5,6,7,8,9};
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
+{
+//     HAL_UART_Transmit(&hlpuart1,(uint8_t*)ble_rxdate11111,3,1000);
+//    uint8_t ble_rxzhongzhuandate[50];
+//    uint8_t ble_zhongzhuannum;
+//    if(lp_time>3)
+    {
+    ble_rxzhongzhuandate[ble_zhongzhuannum]=BleRxBuffer[0];
+    ble_zhongzhuannum++;
+    if(ble_rxzhongzhuandate[ble_zhongzhuannum-1]==0x0A&&ble_rxzhongzhuandate[ble_zhongzhuannum-2]==0x0D)
+    {
+//        HAL_UART_Transmit(&hlpuart1,ble_rxdate,5,1000);
+        ble_zhongzhuannum=0;
+    memcpy(ble_rxdate,ble_rxzhongzhuandate,50);
+    memset(ble_rxzhongzhuandate,0,sizeof(ble_rxzhongzhuandate));
+        fangzhijinrushuimian_flag=0;
+        ble_rx_success_flag=1;
+    }
+    HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)BleRxBuffer, 1);
+//	if(huart->Instance == hlpuart.Instance) 
+//        {	//if(huart == &huart3)
+//		g_uart3_rx_status = SET;
+//	    }
+    }
+}
+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];
+//    ble_zhongzhuannum++;
+//    if(ble_rxzhongzhuandate[ble_zhongzhuannum-1]==0x0A&&ble_rxzhongzhuandate[ble_zhongzhuannum-2]==0x0D)
+//    {
+//        ble_zhongzhuannum=0;
+//    memcpy(ble_rxdate,ble_rxzhongzhuandate,50);
+//    memset(ble_rxzhongzhuandate,0,sizeof(ble_rxzhongzhuandate));
+//    }
+//        if(lp_time>3)
+    fangzhijinrushuimian_flag=1;
+    HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)BleRxBuffer, 1);
+//    HAL_UART_Transmit(&hlpuart1,ble_rxdate,2,1000);
+}
+void Ble_rx_Poll()
+{
+  if(ble_rx_success_flag)
+  {
+  ble_rx_success_flag=0;
+      if(ble_rxdate[0]==0x55&&ble_rxdate[1]==0xAA&&ble_rxdate[5]==0x0D&&ble_rxdate[6]==0x0A)
+      {
+            if(ble_rxdate[2]==0x01)
+            {
+            memcpy(&g_com_map[NEARBASE_ID1],&ble_rxdate[3],2);
+                save_com_map_to_flash();
+                delay_ms(100);
+//                NVIC_SystemReset();
+            }
+            if(ble_rxdate[3]==0x02)
+            {
+            memcpy(&g_com_map[NEARBASE_ID2],&ble_rxdate[4],2);
+                save_com_map_to_flash();
+                delay_ms(100);
+//                NVIC_SystemReset();
+            }
+
+          
+      }
+      HAL_UART_Transmit(&hlpuart1,ble_rxdate,10,1000);
+   memset(ble_rxdate,0,sizeof(ble_rxdate));
+  }
+}
 /* USER CODE END 0 */
 
 /**
@@ -583,7 +659,8 @@
   MX_SPI1_Init();
   MX_ADC_Init();
   
-//  MX_IWDG_Init();
+  MX_IWDG_Init();
+  MX_LPUART1_UART_Init();
   /* USER CODE BEGIN 2 */
 //    LED_LG_ON;
     Program_Init();
@@ -614,6 +691,7 @@
     usart_send[1]=0xaa;
     bat_percent=Get_VDDVlotage();
       GetLoratx_frequency();
+    HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)BleRxBuffer, 1);
 //    Lora47X_Init();
 //	mcu_sleep();
 	//LED0_BLINK;		
@@ -634,15 +712,26 @@
 //Lora_rx_open();
 //      Lora_Tx_Poll();
       Lora_Tx_Poll();
-//    HAL_IWDG_Refresh(&hiwdg);
-    IdleTask();	
+      Ble_rx_Poll();
+    HAL_IWDG_Refresh(&hiwdg);
+//    IdleTask();	
 //	Radio.IrqProcess( ); // Process Radio IRQ
 //     Anchor_App();
 
-    #ifndef DEBUG_MODE	
-    if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))				
+//    #ifndef DEBUG_MODE	
+//    if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))	
+//  {      
+      if(fangzhijinrushuimian_flag==0)
+          {
+    Selection.WakeUpEvent = UART_WAKEUP_ON_STARTBIT;
+    HAL_UARTEx_EnableClockStopMode(&hlpuart1);
+    HAL_UARTEx_EnableStopMode( &hlpuart1 );
+    HAL_UARTEx_StopModeWakeUpSourceConfig( &hlpuart1, Selection );
+    __HAL_UART_ENABLE_IT(&hlpuart1, UART_IT_WUF);      
     HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);  
-    #endif
+          }
+//  }
+//    #endif
     
   }
   /* USER CODE END 3 */
@@ -694,8 +783,10 @@
   {
     Error_Handler();
   }
-  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_LPTIM1;
+  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_LPUART1
+                              |RCC_PERIPHCLK_LPTIM1;
   PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
+  PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_LSE;
   PeriphClkInit.LptimClockSelection = RCC_LPTIM1CLKSOURCE_LSE;
 
   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
@@ -824,40 +915,36 @@
 }
 
 /**
-  * @brief SPI1 Initialization Function
+  * @brief LPUART1 Initialization Function
   * @param None
   * @retval None
   */
-static void MX_SPI1_Init(void)
+static void MX_LPUART1_UART_Init(void)
 {
 
-  /* USER CODE BEGIN SPI1_Init 0 */
+  /* USER CODE BEGIN LPUART1_Init 0 */
 
-  /* USER CODE END SPI1_Init 0 */
+  /* USER CODE END LPUART1_Init 0 */
 
-  /* USER CODE BEGIN SPI1_Init 1 */
+  /* USER CODE BEGIN LPUART1_Init 1 */
 
-  /* USER CODE END SPI1_Init 1 */
-  /* SPI1 parameter configuration*/
-  hspi1.Instance = SPI1;
-  hspi1.Init.Mode = SPI_MODE_MASTER;
-  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
-  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
-  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
-  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
-  hspi1.Init.NSS = SPI_NSS_SOFT;
-  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
-  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
-  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
-  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
-  hspi1.Init.CRCPolynomial = 7;
-  if (HAL_SPI_Init(&hspi1) != HAL_OK)
+  /* USER CODE END LPUART1_Init 1 */
+  hlpuart1.Instance = LPUART1;
+  hlpuart1.Init.BaudRate = 9600;
+  hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
+  hlpuart1.Init.StopBits = UART_STOPBITS_1;
+  hlpuart1.Init.Parity = UART_PARITY_NONE;
+  hlpuart1.Init.Mode = UART_MODE_TX_RX;
+  hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+  hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
+  hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
+  if (HAL_UART_Init(&hlpuart1) != HAL_OK)
   {
     Error_Handler();
   }
-  /* USER CODE BEGIN SPI1_Init 2 */
-__HAL_SPI_ENABLE(&hspi1);
-  /* USER CODE END SPI1_Init 2 */
+  /* USER CODE BEGIN LPUART1_Init 2 */
+
+  /* USER CODE END LPUART1_Init 2 */
 
 }
 
@@ -909,6 +996,44 @@
 }
 
 /**
+  * @brief SPI1 Initialization Function
+  * @param None
+  * @retval None
+  */
+static void MX_SPI1_Init(void)
+{
+
+  /* USER CODE BEGIN SPI1_Init 0 */
+
+  /* USER CODE END SPI1_Init 0 */
+
+  /* USER CODE BEGIN SPI1_Init 1 */
+
+  /* USER CODE END SPI1_Init 1 */
+  /* SPI1 parameter configuration*/
+  hspi1.Instance = SPI1;
+  hspi1.Init.Mode = SPI_MODE_MASTER;
+  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
+  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
+  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
+  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
+  hspi1.Init.NSS = SPI_NSS_SOFT;
+  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
+  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
+  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
+  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+  hspi1.Init.CRCPolynomial = 7;
+  if (HAL_SPI_Init(&hspi1) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN SPI1_Init 2 */
+__HAL_SPI_ENABLE(&hspi1);
+  /* USER CODE END SPI1_Init 2 */
+
+}
+
+/**
   * Enable DMA controller clock
   */
 static void MX_DMA_Init(void)
@@ -946,8 +1071,8 @@
   HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin|SDA_Pin|SCL_Pin, GPIO_PIN_SET);
 
   /*Configure GPIO pin Output Level */
-  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10|LED1_G_Pin|LED1_R_Pin|GPIO_PIN_14
-                          |RADIO_nRESET_Pin|RADIO_NSS_Pin|GPIO_PIN_7, GPIO_PIN_RESET);
+  HAL_GPIO_WritePin(GPIOB, LED1_G_Pin|LED1_R_Pin|GPIO_PIN_14|RADIO_nRESET_Pin
+                          |RADIO_NSS_Pin|GPIO_PIN_7, GPIO_PIN_RESET);
 
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8|DW_CTRL_Pin|LED2_G_Pin, GPIO_PIN_RESET);
@@ -984,20 +1109,14 @@
   GPIO_InitStruct.Pull = GPIO_NOPULL;
   HAL_GPIO_Init(RADIO_BUSY_GPIO_Port, &GPIO_InitStruct);
 
-  /*Configure GPIO pins : PB10 LED1_G_Pin LED1_R_Pin PB14
-                           RADIO_nRESET_Pin RADIO_NSS_Pin PB7 */
-  GPIO_InitStruct.Pin = GPIO_PIN_10|LED1_G_Pin|LED1_R_Pin|GPIO_PIN_14
-                          |RADIO_nRESET_Pin|RADIO_NSS_Pin|GPIO_PIN_7;
+  /*Configure GPIO pins : LED1_G_Pin LED1_R_Pin PB14 RADIO_nRESET_Pin
+                           RADIO_NSS_Pin PB7 */
+  GPIO_InitStruct.Pin = LED1_G_Pin|LED1_R_Pin|GPIO_PIN_14|RADIO_nRESET_Pin
+                          |RADIO_NSS_Pin|GPIO_PIN_7;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
-  /*Configure GPIO pin : INPUT_5V_Pin */
-  GPIO_InitStruct.Pin = INPUT_5V_Pin;
-  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
-  HAL_GPIO_Init(INPUT_5V_GPIO_Port, &GPIO_InitStruct);
 
   /*Configure GPIO pins : PA8 DW_CTRL_Pin LED2_G_Pin */
   GPIO_InitStruct.Pin = GPIO_PIN_8|DW_CTRL_Pin|LED2_G_Pin;

--
Gitblit v1.9.3