Parcourir la source

添加E52接收指令

xuxinyi il y a 2 mois
Parent
commit
51c3c8b873
6 fichiers modifiés avec 65 ajouts et 29 suppressions
  1. 3 1
      CMakeLists.txt
  2. 12 0
      Core/Inc/E52.h
  3. 1 0
      Core/Inc/main.h
  4. 26 0
      Core/Src/E52.c
  5. 21 9
      Core/Src/main.c
  6. 2 19
      Core/Src/stm32f1xx_it.c

+ 3 - 1
CMakeLists.txt

@@ -34,7 +34,9 @@ enable_language(C ASM)
 # Create an executable object type
 add_executable(${CMAKE_PROJECT_NAME}
         Core/Src/E104-BT5005A.c
-        Core/Inc/E104-BT5005A.h)
+        Core/Inc/E104-BT5005A.h
+        Core/Src/E52.c
+        Core/Inc/E52.h)
 
 # Add STM32CubeMX generated sources
 add_subdirectory(cmake/stm32cubemx)

+ 12 - 0
Core/Inc/E52.h

@@ -0,0 +1,12 @@
+//
+// Created by EDZ on 25-9-11.
+//
+
+#ifndef E52_H
+#define E52_H
+#include "main.h"
+#include <stdio.h>
+#include "string.h"
+
+void E52_Analyze_Data(void);
+#endif //E52_H

+ 1 - 0
Core/Inc/main.h

@@ -70,6 +70,7 @@ extern UART_HandleTypeDef huart1;
 extern UART_HandleTypeDef huart2;
 extern UART_HandleTypeDef huart3;
 extern DMA_HandleTypeDef hdma_usart2_rx;
+extern uint8_t newLoraDataFlag;
 
 /* USER CODE END Private defines */
 

+ 26 - 0
Core/Src/E52.c

@@ -0,0 +1,26 @@
+//
+// Created by EDZ on 25-9-11.
+//
+
+#include "../Inc/E52.h"
+
+void E52_Analyze_Data() {
+    // uint16_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);
+
+    if (rx_buf_uart2[0] == 0x55 && rx_buf_uart2[1] == 0xAA) {
+        printf("The data is command\r\n");
+    }else if (strncmp((char *)rx_buf_uart2, "SUCCESS", 7) == 0) {
+        printf("The data is a callback\r\n");
+    }else if (rx_buf_uart2[0] == 'A' && rx_buf_uart2[1] == 'T') {
+        printf("The data is AT data\r\n");
+    }else {
+        printf("The data is other data\r\n");
+    }
+    // 清空缓冲区(可选)
+    memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
+    // 重新开启 DMA 接收
+    HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf_uart2));
+}
+
+
+

+ 21 - 9
Core/Src/main.c

@@ -23,6 +23,7 @@
 #include <stdlib.h>
 
 #include "string.h"
+#include "E52.h"
 #include "E104-BT5005A.h"
 //上船测试版本
 /* Private includes ----------------------------------------------------------*/
@@ -63,6 +64,9 @@ uint8_t RandomTimer= 3*60;
 // uint8_t loraDataErrorCount = 0;
 uint8_t workMode = 0;  // 0: 接收蓝牙数据 1: 使用lora发生数据 2:等待间隔时间
 uint8_t receiveBlDataCount = 0;
+
+uint8_t newLoraDataFlag = 0;  //接收lora数据成功标志位。1:有新数据来。0.表示等待接收数据。后续可以改成队列类型。
+
 /* USER CODE END PV */
 
 /* Private function prototypes -----------------------------------------------*/
@@ -264,16 +268,24 @@ int main(void)
     // }else {
     //   HAL_Delay(1000);
     // }
-    int i = 0;
-    while (i < 20) {
-      printf("Hello world:%d\r\n",i);
-      i++;
-      if (i == 15) {
-        HAL_SuspendTick();   // 停止 SysTick 中断
-        __WFI();             // 真正进入 Sleep
-        HAL_ResumeTick();    // 唤醒后恢复 SysTick
+
+    while (1) {
+      // printf("Hello world:%d\r\n",i);
+      // //睡眠测试 --
+      // i++;
+      // if (i == 15) {
+      //   HAL_SuspendTick();   // 停止 SysTick 中断
+      //   __WFI();             // 真正进入 Sleep
+      //   HAL_ResumeTick();    // 唤醒后恢复 SysTick
+      // }
+      // HAL_Delay(1000);
+      // //睡眠测试 --
+      // printf("Hello world:%d\r\n",newLoraDataFlag);
+      if (newLoraDataFlag == 1) {
+        E52_Analyze_Data();
+        newLoraDataFlag = 0;//重置状态
       }
-      HAL_Delay(1000);
+      // HAL_Delay(500);
     }
   }
   /* USER CODE END 3 */

+ 2 - 19
Core/Src/stm32f1xx_it.c

@@ -25,6 +25,7 @@
 
 #include "string.h"
 #include "E104-BT5005A.h"
+#include "E52.h"
 /* Private includes ----------------------------------------------------------*/
 /* USER CODE BEGIN Includes */
 /* USER CODE END Includes */
@@ -265,19 +266,7 @@ void USART2_IRQHandler(void)
   {
     __HAL_UART_CLEAR_IDLEFLAG(&huart2);    // 清除空闲标志
     HAL_UART_DMAStop(&huart2);             // 停止 DMA
-
-    uint16_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);
-
-    if (rx_buf_uart2[0] == 0x55 && rx_buf_uart2[1] == 0xAA) {
-      printf("The data is command\r\n");
-    }else if (strncmp((char *)rx_buf_uart2, "SUCCESS", 7) == 0) {
-      printf("The data is a callback");
-    }else if (rx_buf_uart2[0] == 'A' && rx_buf_uart2[1] == 'T') {
-      printf("The data is AT data");
-    }else {
-      printf("The data is other data");
-    }
-
+    newLoraDataFlag = 1;
     // // 计算接收到的数据长度
     // uint32_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);
     //
@@ -297,12 +286,6 @@ void USART2_IRQHandler(void)
     //     loraSendNextDataFlag++;
     //   }
     // }
-
-    // 清空缓冲区(可选)
-    memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
-
-    // 重新开启 DMA 接收
-    HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf_uart2));
   }
 
   /* USER CODE BEGIN USART2_IRQn 1 */