xuxinyi 2 місяців тому
батько
коміт
6e6395dacb
4 змінених файлів з 68 додано та 26 видалено
  1. 22 1
      Core/Inc/E52.h
  2. 13 0
      Core/Src/E52.c
  3. 21 19
      Core/Src/main.c
  4. 12 6
      Core/Src/stm32f1xx_it.c

+ 22 - 1
Core/Inc/E52.h

@@ -17,6 +17,8 @@ typedef struct __attribute__((packed)){
     uint8_t target_addr_H;          // 目标地址高字节         默认FF
     uint8_t target_addr_L;          // 目标地址低字节         默认FF
     uint8_t powerValue;             //电量                  默认0
+    uint8_t workMode;               //工作模式              大概区分,发送模式,接受模式。
+    uint8_t receivingNewDataFlag;       //接收lora新数据
 } Device_structure;
 
 // 只声明变量,不定义变量,使用extern关键字
@@ -35,8 +37,27 @@ typedef struct __attribute__((packed)){
     uint8_t frame_tail_H;    // 帧尾高字节
     uint8_t frame_tail_L;    // 帧尾低字节
 } Heartbeat_structure;
-
 void E52_Heartbeat_Fun(void);
+
+// 发送蓝牙结构体
+typedef struct __attribute__((packed)){
+    uint8_t frame_header_H;     // 帧头高字节
+    uint8_t frame_header_L;     // 帧头低字节
+    uint8_t function_code;      // 功能码
+    uint8_t badge_addr_high;    //胸牌地址高字节
+    uint8_t badge_addr_low;     //胸牌地址低字节
+    uint8_t bl_data[8];            //蓝牙数据
+    uint8_t finish_send;        // 是否完成发送
+    // uint8_t target_addr_H;       // 目标地址高字节
+    // uint8_t target_addr_L;   // 目标地址低字节
+    uint8_t frame_tail_H;    // 帧尾高字节
+    uint8_t frame_tail_L;    // 帧尾低字节
+} SendBlData_structure;
+void E52_Send_Bl_Data_Fun(void);
+
+
+
+
 void E52_Analyze_Data(void);
 
 #endif //E52_H

+ 13 - 0
Core/Src/E52.c

@@ -33,6 +33,19 @@ void E52_Heartbeat_Fun() {
 
 void E52_Send_Bl_Data_Fun() {
     printf("这是发送蓝牙数据");
+    SendBlData_structure sendBlData_structure;
+    sendBlData_structure.frame_header_H = 0x55;
+    sendBlData_structure.frame_header_L = 0xAA;
+    sendBlData_structure.function_code = 0x02;
+    sendBlData_structure.badge_addr_high = deviceInfo.loraDeviceAddress_H;
+    sendBlData_structure.badge_addr_low = deviceInfo.loraDeviceAddress_L;
+    memcpy(sendBlData_structure.bl_data, rx_buf, 8);
+    sendBlData_structure.finish_send = 0x01;
+    sendBlData_structure.frame_tail_H = 0xFF;
+    sendBlData_structure.frame_tail_L = 0xEE;
+    printf("blData size = %d\n", sizeof(sendBlData_structure));
+
+    HAL_UART_Transmit(&huart2, (uint8_t *)&sendBlData_structure, sizeof(sendBlData_structure), HAL_MAX_DELAY);
     // TODO: command:02
 }
 

+ 21 - 19
Core/Src/main.c

@@ -168,32 +168,33 @@ int main(void)
   MX_DMA_Init();
   MX_USART1_UART_Init();
   MX_USART2_UART_Init();
-  // MX_USART3_UART_Init();
+  MX_USART3_UART_Init();
   /* USER CODE BEGIN 2 */
   // 启动 USART2 DMA 接收
-  // HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
+  HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
   // // 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));
+  __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
+  HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf_uart2));
   // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
   // 使能 USART2 空闲中断
   __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
   Device_Info_Init_Fun();
+  printf("开始初始化1\r\n");
+  HAL_Delay(4000);
+  printf("开始初始化\r\n");
+  printf("切换为观察者模式\r\n");
+  E104_BT5005A_ROLE_Fun();
+  HAL_Delay(2000);
+  printf("初始化扫描间隔\r\n");
+  E104_BT5005A_SCANINTV_Fun();
+  HAL_Delay(2000);
+  printf("初始化扫描窗口\r\n");
+  E104_BT5005A_SCANWND_Fun();
+  HAL_Delay(2000);
+  printf("初始化复位\r\n");
+  E104_BT5005A_RESET_Fun();
   HAL_Delay(2000);
-  // printf("开始初始化\r\n");
-  // printf("切换为观察者模式\r\n");
-  // E104_BT5005A_ROLE_Fun();
-  // HAL_Delay(2000);
-  // printf("初始化扫描间隔\r\n");
-  // E104_BT5005A_SCANINTV_Fun();
-  // HAL_Delay(2000);
-  // printf("初始化扫描窗口\r\n");
-  // E104_BT5005A_SCANWND_Fun();
-  // HAL_Delay(2000);
-  // printf("初始化复位\r\n");
-  // E104_BT5005A_RESET_Fun();
-  // HAL_Delay(2000);
 
   printf("开启Lora广播模块\r\n");
   const char *lora_msg = "AT+OPTION=3,0";
@@ -295,10 +296,11 @@ int main(void)
       //   E52_Analyze_Data();
       //   newLoraDataFlag = 0;//重置状态
       // }
-      E52_Heartbeat_Fun();
+      // E52_Heartbeat_Fun();
+      // E52_Send_Bl_Data_Fun();
       // const char *end_msg = "SENDEND\r\n";
       // HAL_UART_Transmit(&huart2, (uint8_t *)end_msg, strlen(end_msg), HAL_MAX_DELAY);
-      HAL_Delay(1000);
+      // HAL_Delay(1000);
     }
   }
   /* USER CODE END 3 */

+ 12 - 6
Core/Src/stm32f1xx_it.c

@@ -337,13 +337,19 @@ void USART3_IRQHandler(void)
     HAL_UART_DMAStop(&huart3);
 
     uint32_t received_len = sizeof(rx_buf) - __HAL_DMA_GET_COUNTER(huart3.hdmarx);
-    if (receiveBlDataCount < 115)
-    {
-      memcpy(totalData[receiveBlDataCount], rx_buf, received_len);
-      receiveBlDataCount++;
-      memset(rx_buf, 0, received_len);
-      HAL_UART_Receive_DMA(&huart3, rx_buf, received_len); // 重新启动
+    // if (receiveBlDataCount < 115)
+    // {
+    //   memcpy(totalData[receiveBlDataCount], rx_buf, received_len);
+    //   receiveBlDataCount++;
+    //   memset(rx_buf, 0, received_len);
+    //   HAL_UART_Receive_DMA(&huart3, rx_buf, received_len); // 重新启动
+    // }
+    if (strncmp((char *)rx_buf, "AT", 2) != 0) {
+      E52_Send_Bl_Data_Fun();
     }
+
+    memset(rx_buf, 0, received_len);
+    HAL_UART_Receive_DMA(&huart3, rx_buf, received_len); // 重新启动
   }
   /* USER CODE END USART3_IRQn 1 */
 }