Quellcode durchsuchen

添加关机操作

xuxinyi vor 2 Monaten
Ursprung
Commit
005684f34b
2 geänderte Dateien mit 72 neuen und 74 gelöschten Zeilen
  1. 67 74
      Core/Src/main.c
  2. 5 0
      Core/Src/stm32f1xx_it.c

+ 67 - 74
Core/Src/main.c

@@ -337,6 +337,9 @@ int main(void)
 
   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
+  // RTC_DateTimeTypeDef now;
+  // RTC_GetDateTime(&hrtc, &now);
+
   printf("Device is ready\r\n");
   printf("设备地址:0x%02X%02X\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
   uint8_t i = 0;
@@ -347,79 +350,54 @@ int main(void)
 
     /* USER CODE BEGIN 3 */
     printf("deviceInfo.commandFromCloud:%02x\r\n",deviceInfo.commandFromCloud);
-    RTC_DateTimeTypeDef now;
-    RTC_GetDateTime(&hrtc, &now);
-    GPIO_PinState sosState = HAL_GPIO_ReadPin(SOS_KEY_GPIO_Port, SOS_KEY_Pin);//高为未按压,低为按下,优先级最高
-    GPIO_PinState powerState = HAL_GPIO_ReadPin(JUGE_PIN_GPIO_Port, JUGE_PIN_Pin);
-
-    if (powerState == GPIO_PIN_RESET) {
-      // powerOff();
-      deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-      printf("收到未知步骤,忽略处理\r\n");
-      HAL_Delay(10*60*1000);
-    }
-
-    if (ledShanshuo  != now.seconds) {
-      ledShanshuo = now.seconds;
-    }
-
-    if (!sosState) {
-      // E52_Heartbeat_Fun();
-      printf("SOS中\r\n");
-
-      deviceInfo.BlDataFlag = BL_START;
-      printf("开启蓝牙扫描\r\n");
-      HAL_Delay(1000);
-      deviceInfo.BlDataFlag = BL_STOP;
-      int k = 0;
-      while (receiveBlDataCount > k) {
-
-        printf("发送第%d个蓝牙数据给Lora\r\n", k);
-        if (deviceInfo.loraSendSuccessFlag == 0) {
-          E52_Send_SOS_Fun(k,0x00);
-        }else {
-          continue;
-        }
-        memset(totalData[k], 0, sizeof(totalData[k]));
-        k++;
-      }
-      HAL_Delay(1000);
-      E52_Send_Bl_Data_Fun(k,0x01);
-      printf("停止蓝牙扫描,开始发送蓝牙数据给Lora\r\n");
-
-      HAL_Delay(2000);
-      receiveBlDataCount = 0;
-      deviceInfo.timeCount = 0;
-      deviceInfo.forwardBLAndLoraDataDuration = 0;
-      k = 0;
-      printf("发送结束\r\n");
-      HAL_Delay(2000);
-
-      continue;
-    }
+    // GPIO_PinState sosState = HAL_GPIO_ReadPin(SOS_KEY_GPIO_Port, SOS_KEY_Pin);
+    // GPIO_PinState powerState = HAL_GPIO_ReadPin(JUGE_PIN_GPIO_Port, JUGE_PIN_Pin);
+    //
+    // if (powerState == GPIO_PIN_RESET) {
+    //   // powerOff();
+    //   deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+    //   printf("收到未知步骤,忽略处理\r\n");
+    //   HAL_Delay(10*60*1000);
+    // }
 
-    // 命令为IDLE,且步骤为STEP_INIT 说明有新数据。
-    if (GET_CMD( deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_VERIFY && sosState) {
-      E52_Analyze_Data();
-    }
+    // if (ledShanshuo  != now.seconds) {
+    //   ledShanshuo = now.seconds;
+    // }
 
-    // 检查是否接收到"心跳"命令,且设备在线
-    if (!deviceInfo.isOnline && sosState){
-      printf("The device is not online.\r\n");
-      deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
-      if (!deviceInfo.loraSendSuccessFlag) {
-        E52_Heartbeat_Fun();
-      }
-      uint8_t count = 0;
-      while(count < 10) {
-        if (HAL_GPIO_ReadPin(JUGE_PIN_GPIO_Port, JUGE_PIN_Pin) == GPIO_PIN_RESET) {
-          // powerOff();
-          break;
-        }
-        count++;
-        HAL_Delay(1000);
-      }
-    }
+    // if (!sosState) {
+    //   // E52_Heartbeat_Fun();
+    //   printf("SOS中\r\n");
+    //
+    //   deviceInfo.BlDataFlag = BL_START;
+    //   printf("开启蓝牙扫描\r\n");
+    //   HAL_Delay(1000);
+    //   deviceInfo.BlDataFlag = BL_STOP;
+    //   int k = 0;
+    //   while (receiveBlDataCount > k) {
+    //
+    //     printf("发送第%d个蓝牙数据给Lora\r\n", k);
+    //     if (deviceInfo.loraSendSuccessFlag == 0) {
+    //       E52_Send_SOS_Fun(k,0x00);
+    //     }else {
+    //       continue;
+    //     }
+    //     memset(totalData[k], 0, sizeof(totalData[k]));
+    //     k++;
+    //   }
+    //   HAL_Delay(1000);
+    //   E52_Send_Bl_Data_Fun(k,0x01);
+    //   printf("停止蓝牙扫描,开始发送蓝牙数据给Lora\r\n");
+    //
+    //   HAL_Delay(2000);
+    //   receiveBlDataCount = 0;
+    //   deviceInfo.timeCount = 0;
+    //   deviceInfo.forwardBLAndLoraDataDuration = 0;
+    //   k = 0;
+    //   printf("发送结束\r\n");
+    //   HAL_Delay(2000);
+    //
+    //   continue;
+    // }
 
     // if (SOS_key_struct.sosCheckActive) {
     //   RTC_DateTimeTypeDef now;
@@ -440,8 +418,23 @@ int main(void)
     //   }
     // }
 
+    // 检查是否接收到"心跳"命令,且设备在线
+    if (!deviceInfo.isOnline){
+      printf("The device is not online.\r\n");
+      deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+      if (!deviceInfo.loraSendSuccessFlag) {
+        E52_Heartbeat_Fun();
+      }
+      HAL_Delay(3000);
+    }
+
+    // 解析后台命令
+    if (GET_CMD( deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_VERIFY) {
+      E52_Analyze_Data();
+    }
+
     // 03:请求蓝牙数据
-    if (GET_CMD( deviceInfo.commandFromCloud)  == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline && sosState) {
+    if (GET_CMD( deviceInfo.commandFromCloud)  == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline) {
 
       switch (GET_STEP(deviceInfo.commandFromCloud)) {
         case REQUEST_BLUETOOTH_DATA_SCAN:
@@ -487,7 +480,7 @@ int main(void)
     }
 
     // 08:请求心跳数据
-    if (GET_CMD( deviceInfo.commandFromCloud)  == E52_HEARTBEAT && deviceInfo.isOnline && sosState) {
+    if (GET_CMD( deviceInfo.commandFromCloud)  == E52_HEARTBEAT && deviceInfo.isOnline) {
       switch (GET_STEP(deviceInfo.commandFromCloud)) {
         case HEARTBEAT_SEND:
           if (deviceInfo.loraSendSuccessFlag == 0) {
@@ -509,7 +502,7 @@ int main(void)
     }
 
     // 07:配置E52
-    if (GET_CMD( deviceInfo.commandFromCloud)  == CONFIGURE_E52 && deviceInfo.isOnline && sosState) {
+    if (GET_CMD( deviceInfo.commandFromCloud)  == CONFIGURE_E52 && deviceInfo.isOnline) {
       switch (GET_STEP(deviceInfo.commandFromCloud)) {
           case CONFIGURE_E52_SET_BROADCAST_TYPE:      //第一步,配置广播类型
               E52_CONFIG_BROADCAST_TYPE_FUN(deviceInfo.broadcast_type);

+ 5 - 0
Core/Src/stm32f1xx_it.c

@@ -415,15 +415,20 @@ void RTC_Alarm_IRQHandler(void)
 /* USER CODE BEGIN 1 */
 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 {
+  RTC_DateTimeTypeDef now;
+  RTC_GetDateTime(&hrtc, &now);
+
   if(GPIO_Pin == SOS_KEY_Pin)
   {
     printf("SOS_KEY 按下\r\n");
+
     // 处理 SOS
   }
   else if(GPIO_Pin == JUGE_PIN_Pin)
   {
     printf("JUGE_KEY 按下\r\n");
     // 处理 JUGE
+    HAL_GPIO_WritePin(POWER_ON_GPIO_Port, POWER_ON_Pin, GPIO_PIN_RESET);
   }
 }