浏览代码

区分lora数据类型。

xuxinyi 2 月之前
父节点
当前提交
a273ca7693
共有 2 个文件被更改,包括 52 次插入37 次删除
  1. 22 19
      Core/Src/main.c
  2. 30 18
      Core/Src/stm32f1xx_it.c

+ 22 - 19
Core/Src/main.c

@@ -154,19 +154,19 @@ int main(void)
   MX_GPIO_Init();
   MX_DMA_Init();
   MX_USART1_UART_Init();
-  // MX_USART2_UART_Init();
+  MX_USART2_UART_Init();
   // MX_USART3_UART_Init();
-  // /* USER CODE BEGIN 2 */
-  // // 启动 USART2 DMA 接收
+  /* USER CODE BEGIN 2 */
+  // 启动 USART2 DMA 接收
   // 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_Receive_IT(&huart2, uart2_rx_byte, 7);
-  // // 使能 USART2 空闲中断
-  // __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
-  // HAL_Delay(5000);
+  HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf));
+  // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
+  // 使能 USART2 空闲中断
+  __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
+  HAL_Delay(2000);
   // printf("开始初始化\r\n");
   // printf("切换为观察者模式\r\n");
   // E104_BT5005A_ROLE_Fun();
@@ -180,17 +180,20 @@ int main(void)
   // printf("初始化复位\r\n");
   // E104_BT5005A_RESET_Fun();
   // HAL_Delay(2000);
-  //
-  // printf("开启Lora广播模块");
-  // 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);
+
+  printf("开启Lora广播模块");
+  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);
   // MAC=0x0569a82a
 
   // uint16_t count = 0;

+ 30 - 18
Core/Src/stm32f1xx_it.c

@@ -266,26 +266,38 @@ void USART2_IRQHandler(void)
     __HAL_UART_CLEAR_IDLEFLAG(&huart2);    // 清除空闲标志
     HAL_UART_DMAStop(&huart2);             // 停止 DMA
 
-    // 计算接收到的数据长度
-    uint32_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);
-
-    // 检查是否收到 "SUCCESS"
-    if (received_len >= 7 && strncmp((char *)rx_buf_uart2, "SUCCESS", 7) == 0 && workMode == 1)
-    {
-      // TODO: 收到 SUCCESS 后执行的代码
-      printf("发生成功:%s\r\n",rx_buf_uart2);
-      loraSendNextDataFlag = 0;
-    }else if (workMode == 1 && rx_buf_uart2[0] != 0xC3) {
-      printf("err:%s",rx_buf_uart2);
-      if (loraSendNextDataFlag > 3)
-      {
-        // loraSendNextDataFlag = 99;//0表示发送成功。99表示发送超时。 >0 <99表示发送失败,重新发送。
-        printf("发送数据:失败。继续发生下一个数据\r\n");
-      }else {
-        loraSendNextDataFlag++;
-      }
+    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");
     }
 
+    // // 计算接收到的数据长度
+    // uint32_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);
+    //
+    // // 检查是否收到 "SUCCESS"
+    // if (received_len >= 7 && strncmp((char *)rx_buf_uart2, "SUCCESS", 7) == 0 && workMode == 1)
+    // {
+    //   // TODO: 收到 SUCCESS 后执行的代码
+    //   printf("发生成功:%s\r\n",rx_buf_uart2);
+    //   loraSendNextDataFlag = 0;
+    // }else if (workMode == 1 && rx_buf_uart2[0] != 0xC3) {
+    //   printf("err:%s",rx_buf_uart2);
+    //   if (loraSendNextDataFlag > 3)
+    //   {
+    //     // loraSendNextDataFlag = 99;//0表示发送成功。99表示发送超时。 >0 <99表示发送失败,重新发送。
+    //     printf("发送数据:失败。继续发生下一个数据\r\n");
+    //   }else {
+    //     loraSendNextDataFlag++;
+    //   }
+    // }
+
     // 清空缓冲区(可选)
     memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));