Quellcode durchsuchen

提取出地址

xuxinyi vor 2 Monaten
Ursprung
Commit
6669ec4aa2
4 geänderte Dateien mit 35 neuen und 7 gelöschten Zeilen
  1. 1 1
      Core/Inc/main.h
  2. 1 1
      Core/Src/E52.c
  3. 5 4
      Core/Src/main.c
  4. 28 1
      Core/Src/stm32f1xx_it.c

+ 1 - 1
Core/Inc/main.h

@@ -71,7 +71,7 @@ extern UART_HandleTypeDef huart2;
 extern UART_HandleTypeDef huart3;
 extern DMA_HandleTypeDef hdma_usart2_rx;
 extern uint8_t newLoraDataFlag;
-
+extern  uint8_t loraDeviceAddress[2];
 /* USER CODE END Private defines */
 
 #ifdef __cplusplus

+ 1 - 1
Core/Src/E52.c

@@ -67,7 +67,7 @@ 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", loraDeviceAddress[0], loraDeviceAddress[1]);
     if (rx_buf_uart2[0] == 0x55 && rx_buf_uart2[1] == 0xBB) {
         printf("The data is command\r\n");
     }else if (strncmp((char *)rx_buf_uart2, "SUCCESS", 7) == 0) {

+ 5 - 4
Core/Src/main.c

@@ -67,6 +67,8 @@ uint8_t receiveBlDataCount = 0;
 
 uint8_t newLoraDataFlag = 0;  //接收lora数据成功标志位。1:有新数据来。0.表示等待接收数据。后续可以改成队列类型。
 
+uint8_t loraDeviceAddress[2] = {0}; //
+
 /* USER CODE END PV */
 
 /* Private function prototypes -----------------------------------------------*/
@@ -185,16 +187,13 @@ int main(void)
   // E104_BT5005A_RESET_Fun();
   // HAL_Delay(2000);
 
-  printf("开启Lora广播模块");
+  printf("开启Lora广播模块\r\n");
   const char *lora_msg = "AT+OPTION=3,0";
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
   HAL_Delay(2000);
   const char *lora_msg1 = "AT+TYPE=1";
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg1, strlen(lora_msg1), HAL_MAX_DELAY);
   HAL_Delay(2000);
-  const char *lora_msg2 = "AT+MAC=?";
-  HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg2, strlen(lora_msg2), HAL_MAX_DELAY);
-  HAL_Delay(2000);
   const char *lora_msg3 = "AT+HEAD=0";
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg3, strlen(lora_msg3), HAL_MAX_DELAY);
   HAL_Delay(2000);
@@ -288,6 +287,8 @@ int main(void)
         E52_Analyze_Data();
         newLoraDataFlag = 0;//重置状态
       }
+      // const char *end_msg = "SENDEND\r\n";
+      // HAL_UART_Transmit(&huart2, (uint8_t *)end_msg, strlen(end_msg), HAL_MAX_DELAY);
       // HAL_Delay(500);
     }
   }

+ 28 - 1
Core/Src/stm32f1xx_it.c

@@ -266,7 +266,32 @@ void USART2_IRQHandler(void)
   {
     __HAL_UART_CLEAR_IDLEFLAG(&huart2);    // 清除空闲标志
     HAL_UART_DMAStop(&huart2);             // 停止 DMA
-    newLoraDataFlag = 1;
+
+
+    if (strncmp((char *)rx_buf_uart2, "AT", 2) == 0) {
+      char *ptr = strstr((char *)rx_buf_uart2, "SRC_ADDR=0x");
+      if (ptr != NULL) {
+        // 移动指针到十六进制数值部分(跳过"SRC_ADDR=0x")
+        ptr += strlen("SRC_ADDR=0x");
+
+        // 解析前4个十六进制字符(例如"e116")
+        char hexStr[5] = {0};  // 存储4个字符加结束符
+        strncpy(hexStr, ptr, 4);
+
+        // 转换为32位整数
+        long addr = strtol(hexStr, NULL, 16);
+
+        // 拆分为两个字节:高8位和低8位
+        loraDeviceAddress[0] = (addr >> 8) & 0xFF;  // 0xe1
+        loraDeviceAddress[1] = addr & 0xFF;         // 0x16
+      }
+
+      // 清空缓冲区并重新开启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;
+    }
     // // 计算接收到的数据长度
     // uint32_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);
     //
@@ -286,6 +311,8 @@ void USART2_IRQHandler(void)
     //     loraSendNextDataFlag++;
     //   }
     // }
+
+
   }
 
   /* USER CODE BEGIN USART2_IRQn 1 */