Browse Source

测试循环发送20个

xuxinyi 3 months ago
parent
commit
b1828d0c6d
3 changed files with 33 additions and 15 deletions
  1. 1 0
      Core/Inc/main.h
  2. 18 4
      Core/Src/main.c
  3. 14 11
      Core/Src/stm32f1xx_it.c

+ 1 - 0
Core/Inc/main.h

@@ -61,6 +61,7 @@ void Error_Handler(void);
 /* USER CODE BEGIN Private defines */
 extern uint8_t rx_buf[100];
 extern uint8_t totalData[30][100];
+extern uint8_t workMode;  // 0: 接收蓝牙数据 1: 使用lora发生数据。
 extern UART_HandleTypeDef huart1;
 extern UART_HandleTypeDef huart2;
 extern UART_HandleTypeDef huart3;

+ 18 - 4
Core/Src/main.c

@@ -49,6 +49,7 @@ DMA_HandleTypeDef hdma_usart3_rx;
 uint8_t rx_buf[100] = {0};
 uint8_t totalData[30][100] = {0};
 uint8_t uart2_rx_byte[10] = {0};
+uint8_t workMode = 0;  // 0: 接收蓝牙数据 1: 使用lora发生数据。
 /* USER CODE END PV */
 
 /* Private function prototypes -----------------------------------------------*/
@@ -142,11 +143,14 @@ int main(void)
 
   const char *lora_msg = "AT+OPTION=3,0";
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
+
+  int i = 0;
   // uint8_t i = 0xaa;
   /* USER CODE END 2 */
 
   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
+
   while (1)
   {
     /* USER CODE END WHILE */
@@ -163,10 +167,20 @@ int main(void)
     // HAL_UART_Transmit(&huart1, rx_buf, strlen(rx_buf), 100);
     // i++;
 
-    const char *lora_data = "hello world\r\n";  // 建议加上回车换行
-    HAL_UART_Transmit(&huart2, (uint8_t *)lora_data, strlen(lora_data), HAL_MAX_DELAY);
-
-    HAL_Delay(300);
+    // const char *lora_data = "hello world\r\n";  // 建议加上回车换行
+    // HAL_UART_Transmit(&huart2, (uint8_t *)lora_data, strlen(lora_data), HAL_MAX_DELAY);
+    if (workMode == 1)
+    {
+      if (i < 30)
+      {
+        // 启动 USART2 DMA 接收
+        HAL_UART_Transmit(&huart2, totalData[i], 8, HAL_MAX_DELAY);
+        i++;
+      }else {
+        i = 0;
+      }
+    }
+    HAL_Delay(500);
     /* USER CODE BEGIN 3 */
   }
   /* USER CODE END 3 */

+ 14 - 11
Core/Src/stm32f1xx_it.c

@@ -263,19 +263,22 @@ void USART3_IRQHandler(void)
     __HAL_UART_CLEAR_IDLEFLAG(&huart3);
     HAL_UART_DMAStop(&huart3);
 
-    // uint32_t received_len = sizeof(rx_buf) - __HAL_DMA_GET_COUNTER(huart3.hdmarx);
+    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)
-    // {
-    //   receiveBlDataCount++;
-    //   memcpy(totalData[receiveBlDataCount], rx_buf, sizeof(rx_buf));
-    //   memset(rx_buf, 0, sizeof(rx_buf));
-    //   HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf)); // 重新启动
-    // }else {
-    //   printf("数据接收完毕");
-    // }
+    if (receiveBlDataCount < 20)
+    {
+      receiveBlDataCount++;
+      memcpy(totalData[receiveBlDataCount], rx_buf, received_len);
+      memset(rx_buf, 0, received_len);
+      HAL_UART_Receive_DMA(&huart3, rx_buf, received_len); // 重新启动
+    }else {
+      printf("数据接收完毕");
+      workMode = 1;
+    }
     // HAL_UART_Transmit(&huart2, rx_buf, 8, HAL_MAX_DELAY);
-    memset(rx_buf, 0, sizeof(rx_buf));
+    // 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 */