Browse Source

30周期读取发生数据成功。

xuxinyi 2 months ago
parent
commit
14e3f65f6a
2 changed files with 31 additions and 19 deletions
  1. 27 11
      Core/Src/main.c
  2. 4 8
      Core/Src/stm32f1xx_it.c

+ 27 - 11
Core/Src/main.c

@@ -18,6 +18,9 @@
 /* USER CODE END Header */
 /* Includes ------------------------------------------------------------------*/
 #include "main.h"
+
+#include <time.h>
+
 #include "string.h"
 /* Private includes ----------------------------------------------------------*/
 /* USER CODE BEGIN Includes */
@@ -87,6 +90,11 @@ int __io_putchar(int ch)
   HAL_UART_Transmit(&huart1, &c, 1, HAL_MAX_DELAY);
   return ch;
 }
+
+void sentLoraData(uint8_t  sendDataNum) {
+  HAL_UART_Transmit(&huart2, totalData[sendDataNum], 8, HAL_MAX_DELAY);
+  memset(totalData[sendDataNum], 0, sizeof(totalData[sendDataNum]));
+}
 /* USER CODE END 0 */
 
 /**
@@ -125,7 +133,7 @@ int main(void)
   /* 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);
+  // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
   // 使能 USART2 空闲中断
   __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
 
@@ -145,6 +153,7 @@ int main(void)
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
 
   int i = 0;
+  uint32_t timer = 0;
   // uint8_t i = 0xaa;
   /* USER CODE END 2 */
 
@@ -155,24 +164,31 @@ int main(void)
   {
     /* USER CODE END WHILE */
     if (workMode == 0) {  // 接收蓝牙数据
-
+      printf("接收中\r\n");
     }else if (workMode == 1) { // 发送数据给Lora
-
-    }else if (workMode == 2) { // 等待间隔时间
-
-    }
-    if (workMode == 1)
-    {
-      if (i < 30)
+      printf("发送中\r\n");
+      if (i < 10)
       {
         // 启动 USART2 DMA 接收
-        HAL_UART_Transmit(&huart2, totalData[i], 8, HAL_MAX_DELAY);
+        sentLoraData(i);
         i++;
       }else {
+        workMode = 2;
         i = 0;
       }
+    }else if (workMode == 2) {
+      // 等待间隔时间
+      printf("等待中\r\n");
+      if (timer > 10) {
+        HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
+        __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
+        workMode = 0;
+        timer = 0;
+      }else {
+        timer++;
+      }
     }
-    HAL_Delay(500);
+    HAL_Delay(1000);
     /* USER CODE BEGIN 3 */
   }
   /* USER CODE END 3 */

+ 4 - 8
Core/Src/stm32f1xx_it.c

@@ -264,22 +264,18 @@ void USART3_IRQHandler(void)
     HAL_UART_DMAStop(&huart3);
 
     uint32_t received_len = sizeof(rx_buf) - __HAL_DMA_GET_COUNTER(huart3.hdmarx);
-    // HAL_UART_Transmit(&huart1, rx_buf, received_len, 100);
-    if (receiveBlDataCount < 20)
+    if (receiveBlDataCount < 10)
     {
-      receiveBlDataCount++;
       memcpy(totalData[receiveBlDataCount], rx_buf, received_len);
+      receiveBlDataCount++;
       memset(rx_buf, 0, received_len);
       HAL_UART_Receive_DMA(&huart3, rx_buf, received_len); // 重新启动
     }else {
       printf("数据接收完毕");
+      __HAL_UART_DISABLE_IT(&huart3, UART_IT_IDLE);
+      receiveBlDataCount = 0;
       workMode = 1;
     }
-    // HAL_UART_Transmit(&huart2, rx_buf, 8, HAL_MAX_DELAY);
-    // memset(rx_buf, 0, sizeof(rx_buf));
-    // const char *lora_data = "hello world\r\n";  // 建议加上回车换行
-    // HAL_UART_Transmit(&huart2, (uint8_t *)lora_data, strlen(lora_data), HAL_MAX_DELAY);
-    // HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf)); // 重新启动
   }
   /* USER CODE END USART3_IRQn 1 */
 }