소스 검색

提高接收数量。提高接收速度。其他优化

xuxinyi 2 달 전
부모
커밋
c7e220e7d9
5개의 변경된 파일30개의 추가작업 그리고 8개의 파일을 삭제
  1. 3 0
      Core/Inc/E104-BT5005A.h
  2. 1 1
      Core/Inc/main.h
  3. 4 0
      Core/Src/E104-BT5005A.c
  4. 21 6
      Core/Src/main.c
  5. 1 1
      Core/Src/stm32f1xx_it.c

+ 3 - 0
Core/Inc/E104-BT5005A.h

@@ -18,6 +18,8 @@
 
 #define E104_BT5005A_SCANINTV "AT+SCANINTV=500" //设置扫描间隔
 
+#define E104_BT5005A_SCANWND "AT+SCANWND=128" //设置扫描窗口
+
 #define E104_BT5005A_RESET "AT+RESET" //不知道有没有用
 
 #define E104_BT5005A_SLEEP "AT+SLEEP" //睡眠模式
@@ -28,6 +30,7 @@
 // void E104_BT5005A_SLEEP_Fun(void);
 void E104_BT5005A_ROLE_Fun(void);
 void E104_BT5005A_SCANINTV_Fun(void);
+void E104_BT5005A_SCANWND_Fun(void);
 void E104_BT5005A_RESET_Fun(void);
 void E104_BT5005A_SLEEP_Fun(void);
 void E104_BT5005A_WAKE_UP_Fun(void);

+ 1 - 1
Core/Inc/main.h

@@ -63,7 +63,7 @@ extern uint8_t rx_buf[100];
 extern uint8_t rx_buf_uart2[100];
 extern  uint8_t loraSendNextDataFlag;
 // extern uint8_t loraDataErrorCount;
-extern uint8_t totalData[30][100];
+extern uint8_t totalData[120][50];
 extern uint8_t workMode;  // 0: 接收蓝牙数据 1: 使用lora发生数据。
 extern uint8_t receiveBlDataCount;
 extern UART_HandleTypeDef huart1;

+ 4 - 0
Core/Src/E104-BT5005A.c

@@ -35,6 +35,10 @@ void E104_BT5005A_WAKE_UP_Fun(void) {
 
 }
 
+void E104_BT5005A_SCANWND_Fun(void) {
+    HAL_UART_Transmit(&huart3, (const uint8_t *)E104_BT5005A_SCANWND, strlen(E104_BT5005A_SCANWND), HAL_MAX_DELAY);
+}
+
 
 
 

+ 21 - 6
Core/Src/main.c

@@ -55,9 +55,11 @@ DMA_HandleTypeDef hdma_usart3_rx;
 /* USER CODE BEGIN PV */
 uint8_t rx_buf[100] = {0};
 uint8_t rx_buf_uart2[100] = {0};
-uint8_t totalData[30][100] = {0};
+uint8_t totalData[120][50] = {0};
 uint8_t uart2_rx_byte[10] = {0};
 uint8_t loraSendNextDataFlag = 0;
+uint8_t baseRandomTimer = 60;
+uint8_t RandomTimer= 120;
 // uint8_t loraDataErrorCount = 0;
 uint8_t workMode = 0;  // 0: 接收蓝牙数据 1: 使用lora发生数据 2:等待间隔时间
 uint8_t receiveBlDataCount = 0;
@@ -104,7 +106,7 @@ void sentLoraData(uint8_t  sendDataNum) {
 }
 
 uint8_t randomFun() {
-  return rand() % 60 + 40; //随机时间1分钟到3分钟之间随机数
+  return rand() % RandomTimer + baseRandomTimer; //随机时间1分钟到3分钟之间随机数
 }
 /* USER CODE END 0 */
 
@@ -154,12 +156,17 @@ int main(void)
 
   E104_BT5005A_ROLE_Fun();
   E104_BT5005A_SCANINTV_Fun();
+  E104_BT5005A_SCANWND_Fun();
   E104_BT5005A_RESET_Fun();
 
   const char *lora_msg = "AT+OPTION=3,0";
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
   const char *lora_msg1 = "AT+TYPE=1";
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg1, strlen(lora_msg1), HAL_MAX_DELAY);
+  const char *lora_msg2 = "AT+MAC=?";
+  HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg2, strlen(lora_msg2), HAL_MAX_DELAY);
+
+  // MAC=0x0569a82a
 
   uint8_t count = 0;
   uint8_t randomTime = 0;
@@ -174,7 +181,7 @@ int main(void)
     /* USER CODE END WHILE */
     if (workMode == 0) {  // 接收蓝牙数据
       printf("接收中第%d秒,接受了%d位数据\r\n", count, receiveBlDataCount);
-      if (count > 10) { //搜10秒数据
+      if (count > 30 || receiveBlDataCount >= 115) { //搜10秒数据
         E104_BT5005A_SLEEP_Fun();
         HAL_Delay(5);//等待蓝牙模块进入睡眠模式
         // receiveBlDataCount = 0;
@@ -184,9 +191,9 @@ int main(void)
         count++;
       }
     }else if (workMode == 1) { // 发送数据给Lora
-      printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
       if (count < receiveBlDataCount)
       {
+        printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
         // 启动 USART2 DMA 接收
         sentLoraData(count);
         if (loraSendNextDataFlag == 0 || loraSendNextDataFlag > 3) {
@@ -198,12 +205,15 @@ int main(void)
           printf("send error!\r\n");
         }
       }else {
+        printf("发送结束,总数据大小为%d\r\n",receiveBlDataCount);
+        const char *end_msg = "SENDEND\r\n";
+        HAL_UART_Transmit(&huart2, (uint8_t *)end_msg, strlen(end_msg), HAL_MAX_DELAY);
         receiveBlDataCount = 0;
         workMode = 2;
         count = 0;
       }
     }else if (workMode == 2) {
-      printf("等待中\r\n");
+      printf("等待进度:%d\r\n", count);
       printf("等待时间%d秒\r\n",randomTime);
       if (randomTime == 0) {
         randomTime = randomFun();
@@ -217,7 +227,12 @@ int main(void)
         count++;
       }
     }
-    HAL_Delay(1000);
+    if (workMode == 1) {
+      HAL_Delay(300);
+    }else {
+      HAL_Delay(1000);
+    }
+
     /* USER CODE BEGIN 3 */
   }
   /* USER CODE END 3 */

+ 1 - 1
Core/Src/stm32f1xx_it.c

@@ -315,7 +315,7 @@ void USART3_IRQHandler(void)
     HAL_UART_DMAStop(&huart3);
 
     uint32_t received_len = sizeof(rx_buf) - __HAL_DMA_GET_COUNTER(huart3.hdmarx);
-    if (receiveBlDataCount < 10)
+    if (receiveBlDataCount < 115)
     {
       memcpy(totalData[receiveBlDataCount], rx_buf, received_len);
       receiveBlDataCount++;