Parcourir la source

9-18号,重要,测试版本

xuxinyi il y a 2 mois
Parent
commit
626bbe7513
4 fichiers modifiés avec 17 ajouts et 20 suppressions
  1. 1 0
      Core/Inc/main.h
  2. 2 0
      Core/Src/E52.c
  3. 2 11
      Core/Src/main.c
  4. 12 9
      Core/Src/stm32f1xx_it.c

+ 1 - 0
Core/Inc/main.h

@@ -72,6 +72,7 @@ void Error_Handler(void);
 /* USER CODE BEGIN Private defines */
 extern uint8_t rx_buf[100];
 extern uint8_t rx_buf_uart2[100];
+extern uint8_t rx_buf_uart2_DMA[100];
 extern  uint8_t loraSendNextDataFlag;
 // extern uint8_t loraDataErrorCount;
 extern uint8_t totalData[120][50];

+ 2 - 0
Core/Src/E52.c

@@ -221,6 +221,8 @@ void E52_Analyze_Data() {
         //有效数据。
         deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
     }
+    // memcpy(rx_buf_uart2 ,rx_buf_uart2, sizeof(rx_buf_uart2));
+    memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
 }
 
 

+ 2 - 11
Core/Src/main.c

@@ -58,6 +58,7 @@ DMA_HandleTypeDef hdma_usart3_rx;
 /* USER CODE BEGIN PV */
 uint8_t rx_buf[100] = {0};
 uint8_t rx_buf_uart2[100] = {0};
+uint8_t rx_buf_uart2_DMA[100] = {0};
 uint8_t totalData[120][50] = {0};
 uint8_t uart2_rx_byte[10] = {0};
 uint8_t loraSendNextDataFlag = 0;
@@ -247,7 +248,7 @@ int main(void)
   // // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
   // // 使能 USART2 空闲中断
   __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
-  HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf_uart2));
+  HAL_UART_Receive_DMA(&huart2, rx_buf_uart2_DMA, sizeof(rx_buf_uart2_DMA));
   // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
   // 使能 USART2 空闲中断
   __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
@@ -292,13 +293,6 @@ int main(void)
   printf("设备地址:0x%02X%02X\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
   uint8_t i = 0;
   uint8_t ledShanshuo = 0;
-  // HAL_GPIO_WritePin(PowerLED_GPIO_Port, PowerLED_Pin, GPIO_PIN_RESET);//亮灯
-  // HAL_Delay(2000);
-  // HAL_GPIO_WritePin(PowerLED_GPIO_Port, PowerLED_Pin, GPIO_PIN_SET);//亮灯
-  // HAL_Delay(2000);
-  // HAL_GPIO_WritePin(PowerLED_GPIO_Port, PowerLED_Pin, GPIO_PIN_RESET);//亮灯
-  // HAL_Delay(2000);
-  // HAL_GPIO_WritePin(PowerLED_GPIO_Port, PowerLED_Pin, GPIO_PIN_SET);//亮灯
   while (1)
   {
     /* USER CODE END WHILE */
@@ -315,12 +309,10 @@ int main(void)
     }
 
     if (ledShanshuo  != now.seconds) {
-      HAL_GPIO_TogglePin(PowerLED_GPIO_Port, PowerLED_Pin);
       ledShanshuo = now.seconds;
     }
 
     if (!sosState) {
-      HAL_GPIO_WritePin(PowerLED_GPIO_Port, PowerLED_Pin, GPIO_PIN_SET);
       E52_Heartbeat_Fun();
       printf("SOS中\r\n");
 
@@ -369,7 +361,6 @@ int main(void)
       }
       uint8_t count = 0;
       while(count < 10) {
-        HAL_GPIO_TogglePin(PowerLED_GPIO_Port, PowerLED_Pin);
         if (HAL_GPIO_ReadPin(JUGE_PIN_GPIO_Port, JUGE_PIN_Pin) == GPIO_PIN_RESET) {
           powerOff();
           break;

+ 12 - 9
Core/Src/stm32f1xx_it.c

@@ -294,8 +294,8 @@ void USART2_IRQHandler(void)
     HAL_UART_DMAStop(&huart2);             // 停止 DMA
 
 
-    if (strncmp((char *)rx_buf_uart2, "AT", 2) == 0) {
-      char *ptr = strstr((char *)rx_buf_uart2, "SRC_ADDR=0x");
+    if (strncmp((char *)rx_buf_uart2_DMA, "AT", 2) == 0) {
+      char *ptr = strstr((char *)rx_buf_uart2_DMA, "SRC_ADDR=0x");
       if (ptr != NULL) {
         // 移动指针到十六进制数值部分(跳过"SRC_ADDR=0x")
         ptr += strlen("SRC_ADDR=0x");
@@ -311,20 +311,23 @@ void USART2_IRQHandler(void)
         deviceInfo.loraDeviceAddress_H = (addr >> 8) & 0xFF;  // 0xe1
         deviceInfo.loraDeviceAddress_L = addr & 0xFF;         // 0x16
       }
-      memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
+      memset(rx_buf_uart2_DMA, 0, sizeof(rx_buf_uart2_DMA));
       // // 清空缓冲区并重新开启DMA接收
       // memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
       // HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf_uart2));
-    }if (strncmp((char *)rx_buf_uart2, "SUCCESS", 7) == 0) {
+    }if (strncmp((char *)rx_buf_uart2_DMA, "SUCCESS", 7) == 0) {
       deviceInfo.loraSendSuccessFlag = 0;
-      memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
-    }else if (rx_buf_uart2[3] == deviceInfo.loraDeviceAddress_H && rx_buf_uart2[4] == deviceInfo.loraDeviceAddress_L){
-      deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_VERIFY);  //初始化  命令和步骤。说明有新数据过来
+      memset(rx_buf_uart2_DMA, 0, sizeof(rx_buf_uart2_DMA));
+    }else if (rx_buf_uart2_DMA[3] == deviceInfo.loraDeviceAddress_H && rx_buf_uart2_DMA[4] == deviceInfo.loraDeviceAddress_L){
+      if (GET_CMD(deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_INIT ) {
+        memcpy(rx_buf_uart2 ,rx_buf_uart2_DMA, sizeof(rx_buf_uart2_DMA));
+        deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_VERIFY);  //初始化  命令和步骤。说明有新数据过来
+      }
     }else {
-      memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
+      memset(rx_buf_uart2_DMA, 0, sizeof(rx_buf_uart2_DMA));
     }
     // 重新开启 DMA 接收
-    HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf_uart2));
+    HAL_UART_Receive_DMA(&huart2, rx_buf_uart2_DMA, sizeof(rx_buf_uart2_DMA));
   }
 
   /* USER CODE END USART2_IRQn 1 */