Forráskód Böngészése

完成蓝牙扫描时间获取

xuxinyi 2 hónapja
szülő
commit
5593d0c68c
4 módosított fájl, 17 hozzáadás és 19 törlés
  1. 5 0
      Core/Inc/E52.h
  2. 5 12
      Core/Src/E52.c
  3. 5 5
      Core/Src/main.c
  4. 2 2
      Core/Src/stm32f1xx_it.c

+ 5 - 0
Core/Inc/E52.h

@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <sys/types.h>
 #include "string.h"
+#include "stdlib.h"
 
 // 设备信息结构体
 typedef struct __attribute__((packed)){
@@ -20,8 +21,12 @@ typedef struct __attribute__((packed)){
     uint8_t workMode;               //工作模式              大概区分,发送模式,接受模式。
     // uint8_t receivingNewDataFlag;       //接收lora新数据
     uint8_t sendBlDataFlag;         //发送蓝牙数据
+    uint8_t newLoraDataFlag;  //接收lora数据成功标志位。1:有新数据来。0.表示等待接收数据。后续可以改成队列类型。
+    uint16_t timeCount;             //定时器计数
+    uint16_t forwardBLAndLoraDataDuration;   //转发蓝牙数据持续时间高位ms
 } Device_structure;
 
+
 // 只声明变量,不定义变量,使用extern关键字
 extern Device_structure deviceInfo;
 

+ 5 - 12
Core/Src/E52.c

@@ -97,21 +97,14 @@ void E52_Analyze_Command_Fun() {
 
 void E52_Analyze_Data() {
     // uint16_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);
-    printf("loraDeviceAddress: 0x%02X 0x%02X\r\n", deviceInfo.loraDeviceAddress_H,deviceInfo.loraDeviceAddress_L);
+
     if (rx_buf_uart2[0] == 0x55 && rx_buf_uart2[1] == 0xBB) {
         // printf("The data is command\r\n");
         printf("开启发送蓝牙数据\r\n");
-        deviceInfo.sendBlDataFlag = 1;
-    }else if (rx_buf_uart2[0] == 0x55 && rx_buf_uart2[1] == 0xAA) {
-        // printf("The data is command\r\n");
-        printf("关闭发送蓝牙数据\r\n");
-        deviceInfo.sendBlDataFlag = 0;
-    }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");
+        if (rx_buf_uart2[2] == 0x03) {  //请求发生蓝牙数据
+            deviceInfo.forwardBLAndLoraDataDuration = ((uint16_t)rx_buf_uart2[5] << 8) | rx_buf_uart2[6];
+            deviceInfo.sendBlDataFlag = 1;
+        }
     }
     // 清空缓冲区(可选)
     memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));

+ 5 - 5
Core/Src/main.c

@@ -67,8 +67,6 @@ uint8_t RandomTimer= 3*60;
 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 -----------------------------------------------*/
@@ -138,6 +136,7 @@ void Device_Info_Init_Fun() {
   deviceInfo.target_addr_H = 0xFF;
   deviceInfo.target_addr_L = 0xFF;
   deviceInfo.sendBlDataFlag = 0;
+  deviceInfo.newLoraDataFlag = 0;
 }
 /* USER CODE END 0 */
 
@@ -222,7 +221,7 @@ int main(void)
   srand(HAL_GetTick());
 
   // HAL_TIM_Base_Start(&htim4);
-  HAL_TIM_Base_Start_IT(&htim4);   // 启动计数 + 使能中断
+  // HAL_TIM_Base_Start_IT(&htim4);   // 启动计数 + 使能中断
   /* USER CODE END 2 */
 
   /* Infinite loop */
@@ -310,9 +309,10 @@ int main(void)
       // HAL_UART_Transmit(&huart2, (uint8_t *)end_msg, strlen(end_msg), HAL_MAX_DELAY);
       // HAL_Delay(1000);
     // }
-    if (newLoraDataFlag == 1) {
+    if (deviceInfo.newLoraDataFlag == 1) {
+      printf("loraDeviceAddress: 0x%02X 0x%02X\r\n", deviceInfo.loraDeviceAddress_H,deviceInfo.loraDeviceAddress_L);
       E52_Analyze_Data();
-      newLoraDataFlag = 0;//重置状态
+      deviceInfo.newLoraDataFlag = 0;//重置状态
     }
   }
   /* USER CODE END 3 */

+ 2 - 2
Core/Src/stm32f1xx_it.c

@@ -305,8 +305,8 @@ void USART2_IRQHandler(void)
       // 清空缓冲区并重新开启DMA接收
       memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
       HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf_uart2));
-    } else {
-      newLoraDataFlag = 1;
+    } else if (rx_buf_uart2[3] == deviceInfo.loraDeviceAddress_H && rx_buf_uart2[4] == deviceInfo.loraDeviceAddress_L){
+      deviceInfo.newLoraDataFlag = 1;
     }
     // // 计算接收到的数据长度
     // uint32_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);