Browse Source

添加4秒扫描蓝牙时间

xuxinyi 2 months ago
parent
commit
314d3f36fa
3 changed files with 30 additions and 25 deletions
  1. 1 0
      Core/Inc/main.h
  2. 29 19
      Core/Src/main.c
  3. 0 6
      Core/Src/stm32f1xx_it.c

+ 1 - 0
Core/Inc/main.h

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

+ 29 - 19
Core/Src/main.c

@@ -55,6 +55,7 @@ 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发生数据 2:等待间隔时间
+uint8_t receiveBlDataCount = 0;
 /* USER CODE END PV */
 
 /* Private function prototypes -----------------------------------------------*/
@@ -99,7 +100,7 @@ void sentLoraData(uint8_t  sendDataNum) {
 }
 
 uint8_t randomFun() {
-  return rand() % 120 + 60; //随机时间1分钟到3分钟之间随机数
+  return rand() % 20 + 20; //随机时间1分钟到3分钟之间随机数
 }
 /* USER CODE END 0 */
 
@@ -150,10 +151,9 @@ 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;
-  uint32_t timer = 0;
+  uint8_t count = 0;
+  uint8_t randomTime = 0;
   srand(HAL_GetTick());
-  // uint8_t i = 0xaa;
   /* USER CODE END 2 */
 
   /* Infinite loop */
@@ -163,34 +163,44 @@ int main(void)
   {
     /* USER CODE END WHILE */
     if (workMode == 0) {  // 接收蓝牙数据
-      printf("接收中\r\n");
+      printf("接收中第%d秒,接受了%d位数据\r\n", count, receiveBlDataCount);
+      if (count > 4) { //搜10秒数据
+        E104_BT5005A_SLEEP_Fun();
+        HAL_Delay(5);//等待蓝牙模块进入睡眠模式
+        // receiveBlDataCount = 0;
+        workMode = 1;
+        count = 0;
+      }else {
+        count++;
+      }
     }else if (workMode == 1) { // 发送数据给Lora
-      printf("发送中\r\n");
-      if (i < 10)
+
+      printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
+      if (count < receiveBlDataCount)
       {
         // 启动 USART2 DMA 接收
-        sentLoraData(i);
-        i++;
+        sentLoraData(count);
+        count++;
       }else {
+        receiveBlDataCount = 0;
         workMode = 2;
-        i = 0;
+        count = 0;
       }
     }else if (workMode == 2) {
-      // 等待间隔时间
       printf("等待中\r\n");
-      if (timer > randomFun()) {
+      printf("等待时间%d秒\r\n",randomTime);
+      if (randomTime == 0) {
+        randomTime = randomFun();
+      }
+      if (count > randomFun()) {
         E104_BT5005A_WAKE_UP_Fun();
+        randomTime = 0;
         workMode = 0;
-        timer = 0;
+        count = 0;
       }else {
-        timer++;
+        count++;
       }
     }
-
-
-    // 使用系统滴答计数作为种子 (不太随机,但简单)
-    // E104_BT5005A_SLEEP_Fun();
-    // printf("%d\r\n", randomFun());
     HAL_Delay(1000);
     /* USER CODE BEGIN 3 */
   }

+ 0 - 6
Core/Src/stm32f1xx_it.c

@@ -65,7 +65,6 @@ extern DMA_HandleTypeDef hdma_usart3_rx;
 extern UART_HandleTypeDef huart2;
 extern UART_HandleTypeDef huart3;
 extern TIM_HandleTypeDef htim3;
-uint8_t receiveBlDataCount = 0;
 /* USER CODE BEGIN EV */
 
 /* USER CODE END EV */
@@ -272,11 +271,6 @@ void USART3_IRQHandler(void)
       receiveBlDataCount++;
       memset(rx_buf, 0, received_len);
       HAL_UART_Receive_DMA(&huart3, rx_buf, received_len); // 重新启动
-    }else {
-      printf("数据接收完毕");
-      E104_BT5005A_SLEEP_Fun();
-      receiveBlDataCount = 0;
-      workMode = 1;
     }
   }
   /* USER CODE END USART3_IRQn 1 */