xuxinyi преди 2 месеца
родител
ревизия
bc87587844
променени са 1 файла, в които са добавени 118 реда и са изтрити 91 реда
  1. 118 91
      Core/Src/main.c

+ 118 - 91
Core/Src/main.c

@@ -108,6 +108,20 @@ void sentLoraData(uint8_t  sendDataNum) {
 uint16_t randomFun() {
   return rand() % RandomTimer + baseRandomTimer; //随机时间1分钟到3分钟之间随机数
 }
+
+// 进入睡眠模式
+void EnterSleepMode(void)
+{
+  // 确保所有外设操作完成
+  HAL_Delay(10);
+
+  // 清除所有挂起的中断,防止立即唤醒
+  // __HAL_IRQ_CLEAR_PENDING(EXTI0_IRQn);
+
+  // 进入睡眠模式,任何中断都能唤醒
+  HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
+  // 或者使用WFE指令:HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFE);
+}
 /* USER CODE END 0 */
 
 /**
@@ -140,48 +154,50 @@ int main(void)
   MX_GPIO_Init();
   MX_DMA_Init();
   MX_USART1_UART_Init();
-  MX_USART2_UART_Init();
-  MX_USART3_UART_Init();
-  /* 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);
-  printf("开始初始化\r\n");
-  printf("切换为观察者模式\r\n");
-  E104_BT5005A_ROLE_Fun();
-  HAL_Delay(2000);
-  printf("初始化扫描间隔\r\n");
-  E104_BT5005A_SCANINTV_Fun();
-  HAL_Delay(2000);
-  printf("初始化扫描窗口\r\n");
-  E104_BT5005A_SCANWND_Fun();
-  HAL_Delay(2000);
-  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);
+  // MX_USART2_UART_Init();
+  // MX_USART3_UART_Init();
+  // /* 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);
+  // printf("开始初始化\r\n");
+  // printf("切换为观察者模式\r\n");
+  // E104_BT5005A_ROLE_Fun();
+  // HAL_Delay(2000);
+  // printf("初始化扫描间隔\r\n");
+  // E104_BT5005A_SCANINTV_Fun();
+  // HAL_Delay(2000);
+  // printf("初始化扫描窗口\r\n");
+  // E104_BT5005A_SCANWND_Fun();
+  // HAL_Delay(2000);
+  // 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);
   // MAC=0x0569a82a
 
-  uint16_t count = 0;
-  uint16_t randomTime = 0;
+  // uint16_t count = 0;
+  // uint16_t randomTime = 0;
   srand(HAL_GetTick());
+
+
   /* USER CODE END 2 */
 
   /* Infinite loop */
@@ -190,61 +206,72 @@ int main(void)
   while (1)
   {
     /* USER CODE END WHILE */
-    if (workMode == 0) {  // 接收蓝牙数据
-      printf("接收中第%d秒,接受了%d位数据\r\n", count, receiveBlDataCount);
-      if (count > 30 || receiveBlDataCount >= 115) { //搜10秒数据
-        E104_BT5005A_SLEEP_Fun();
-        HAL_Delay(5);//等待蓝牙模块进入睡眠模式
-        // receiveBlDataCount = 0;
-        workMode = 1;
-        count = 0;
-      }else {
-        count++;
-      }
-    }else if (workMode == 1) { // 发送数据给Lora
-      if (count < receiveBlDataCount)
-      {
-        printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
-        // 启动 USART2 DMA 接收
-        sentLoraData(count);
-        if (loraSendNextDataFlag == 0 || loraSendNextDataFlag > 3) {
-          memset(totalData[count], 0, sizeof(totalData[count]));
-          count++;
-          memset(rx_buf_uart2, 0, 100);
-          loraSendNextDataFlag = 0;
-        }else  {
-          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("等待进度:%d\r\n", count);
-      printf("等待时间%d秒\r\n",randomTime);
-      if (randomTime == 0) {
-        randomTime = randomFun();
-      }
-      if (count > randomTime) {
-        E104_BT5005A_WAKE_UP_Fun();
-        randomTime = 0;
-        workMode = 0;
-        count = 0;
-      }else {
-        count++;
+    /* USER CODE BEGIN 3 */
+
+    // if (workMode == 0) {  // 接收蓝牙数据
+    //   printf("接收中第%d秒,接受了%d位数据\r\n", count, receiveBlDataCount);
+    //   if (count > 30 || receiveBlDataCount >= 115) { //搜10秒数据
+    //     E104_BT5005A_SLEEP_Fun();
+    //     HAL_Delay(5);//等待蓝牙模块进入睡眠模式
+    //     // receiveBlDataCount = 0;
+    //     workMode = 1;
+    //     count = 0;
+    //   }else {
+    //     count++;
+    //   }
+    // }else if (workMode == 1) { // 发送数据给Lora
+    //   if (count < receiveBlDataCount)
+    //   {
+    //     printf("发送第%d个数据,总数据大小为%d\r\n", count,receiveBlDataCount);
+    //     // 启动 USART2 DMA 接收
+    //     sentLoraData(count);
+    //     if (loraSendNextDataFlag == 0 || loraSendNextDataFlag > 3) {
+    //       memset(totalData[count], 0, sizeof(totalData[count]));
+    //       count++;
+    //       memset(rx_buf_uart2, 0, 100);
+    //       loraSendNextDataFlag = 0;
+    //     }else  {
+    //       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("等待进度:%d\r\n", count);
+    //   printf("等待时间%d秒\r\n",randomTime);
+    //   if (randomTime == 0) {
+    //     randomTime = randomFun();
+    //   }
+    //   if (count > randomTime) {
+    //     E104_BT5005A_WAKE_UP_Fun();
+    //     randomTime = 0;
+    //     workMode = 0;
+    //     count = 0;
+    //   }else {
+    //     count++;
+    //   }
+    // }
+    // if (workMode == 1) {
+    //   HAL_Delay(300);
+    // }else {
+    //   HAL_Delay(1000);
+    // }
+    int i = 0;
+    while (i < 20) {
+      printf("Hello world:%d\r\n",i);
+      i++;
+      if (i == 15) {
+        HAL_SuspendTick();   // 停止 SysTick 中断
+        __WFI();             // 真正进入 Sleep
+        HAL_ResumeTick();    // 唤醒后恢复 SysTick
       }
-    }
-    if (workMode == 1) {
-      HAL_Delay(300);
-    }else {
       HAL_Delay(1000);
     }
-
-    /* USER CODE BEGIN 3 */
   }
   /* USER CODE END 3 */
 }