Browse Source

删除多余代码。添加上线通知。

xuxinyi 2 tháng trước cách đây
mục cha
commit
1d8009bf93
5 tập tin đã thay đổi với 25 bổ sung71 xóa
  1. 10 5
      Core/Inc/E52.h
  2. 0 1
      Core/Inc/main.h
  3. 4 0
      Core/Src/E52.c
  4. 11 41
      Core/Src/main.c
  5. 0 24
      Core/Src/stm32f1xx_it.c

+ 10 - 5
Core/Inc/E52.h

@@ -19,13 +19,20 @@
 // 从组合值中提取步骤
 #define GET_STEP(value) ((value & 0xF0))
 
+enum {
+    TRUE = 1,
+    FALSE = 0
+};
+
+
 // 定义云端命令枚举,使命令含义更清晰
 typedef enum {
     IDLE = 0x00,
     REQUEST_BLUETOOTH_DATA = 0x03,  // 请求发送蓝牙数据
     CONFIGURE_E52 = 0x07,           // E52 配置命令
     E52_ENTER_SLEEP = 0x05,         // E52 进入睡眠模式
-    E52_HEARTBEAT = 0x08            // E52 心跳包命令
+    E52_HEARTBEAT = 0x08,            // E52 心跳包命令
+    IS_ONLINE = 0x0A
 } CloudCommand;
 
 
@@ -80,7 +87,7 @@ typedef enum {
 
 // 设备信息结构体
 typedef struct __attribute__((packed)){
-    uint8_t isReady;            // 设备是否就绪
+    uint8_t isOnline;            // 设备是否就绪
     uint8_t broadcast_type;         // 广播类型             01:单波 02:广播 03:多播
     uint8_t loraDeviceAddress_H;    //设备地址高位           默认0
     uint8_t loraDeviceAddress_L;    //设备地址低位           默认0
@@ -92,9 +99,6 @@ typedef struct __attribute__((packed)){
     //使能蓝牙收发数据
     uint8_t BlDataFlag;         //发送蓝牙数据
 
-    //lora接收到新的消息
-    uint8_t newLoraDataFlag;  //接收lora数据成功标志位。1:有新数据来。0.表示等待接收数据。后续可以改成队列类型。
-
     //后台的远程命令
     uint8_t commandFromCloud; //从云端接收到的命令     1.请求蓝牙数据,2.请求lora数据,3.睡眠 4,重新发送点卯数据
 
@@ -165,5 +169,6 @@ void E52_Send_SOS_Fun(void);
 
 
 void E52_Analyze_Data(void);
+void E52_Heartbeat_Fun(void);
 
 #endif //E52_H

+ 0 - 1
Core/Inc/main.h

@@ -70,7 +70,6 @@ extern UART_HandleTypeDef huart1;
 extern UART_HandleTypeDef huart2;
 extern UART_HandleTypeDef huart3;
 extern DMA_HandleTypeDef hdma_usart2_rx;
-extern uint8_t newLoraDataFlag;
 /* USER CODE END Private defines */
 
 #ifdef __cplusplus

+ 4 - 0
Core/Src/E52.c

@@ -124,6 +124,10 @@ void E52_Analyze_Data() {
                 // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(E52_HEARTBEAT, STEP_EXECUTE);
                 E52_Heartbeat_Fun1();
                 break;
+            case IS_ONLINE:
+                deviceInfo.isOnline = TRUE;
+                deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+                break;
             default:
                 deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
                 break;

+ 11 - 41
Core/Src/main.c

@@ -85,20 +85,6 @@ static void MX_TIM4_Init(void);
 /* USER CODE BEGIN 0 */
 #include <stdio.h>
 
-// 重定向fputc函数到USART1
-// int _write(int file, char *ptr, int len)
-// {
-//   HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, HAL_MAX_DELAY);
-//   return len;
-// }
-//
-// int fputc(int ch, FILE *f)
-// {
-//   uint8_t c = ch;
-//   HAL_UART_Transmit(&huart1, &c, 1, HAL_MAX_DELAY);
-//   return ch;
-// }
-
 int __io_putchar(int ch)
 {
   uint8_t c = ch;
@@ -129,6 +115,7 @@ void EnterSleepMode(void)
 }
 
 void Device_Info_Init_Fun() {
+  deviceInfo.isOnline = FALSE;
   deviceInfo.broadcast_type = 0x02;
   deviceInfo.loraDeviceAddress_H = 0x00;
   deviceInfo.loraDeviceAddress_L = 0x00;
@@ -136,8 +123,8 @@ void Device_Info_Init_Fun() {
   deviceInfo.target_addr_H = 0xFF;
   deviceInfo.target_addr_L = 0xFF;
   deviceInfo.BlDataFlag = BL_IDLE;
-  deviceInfo.newLoraDataFlag = 0;
-  deviceInfo.isReady = 0;
+  // deviceInfo.newLoraDataFlag = 0;
+  // deviceInfo.isReady = 0;
   deviceInfo.loraSendSuccessFlag = 0;
   deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);  //初始化
   //TODO: 大循环,获取设备地址信息,否则重新发送。发送上线信息,等待反馈,否则重新发送上线信息。一切准备就绪后,开启isready为1,进入工作模式。
@@ -267,7 +254,6 @@ int main(void)
   const char *lora_msg4 = "AT+SRC_ADDR=?";
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg4, strlen(lora_msg4), HAL_MAX_DELAY);
   HAL_Delay(2000);
-  // MAC=0x0569a82a
 
   // uint16_t count = 0;
   // uint16_t randomTime = 0;
@@ -277,7 +263,6 @@ int main(void)
 
   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
-  // deviceInfo.sendBlDataFlag = 1;
   printf("Device is ready\r\n");
   uint8_t i = 0;
   while (1)
@@ -285,19 +270,13 @@ int main(void)
     /* USER CODE END WHILE */
 
     /* USER CODE BEGIN 3 */
-    //检测是否有新的lora 数据判断
-    //TODO 应该防止频繁调用此函数。如果command 是IDLE,则调用此函数。
-    // if (deviceInfo.newLoraDataFlag == 1) {
-    //   // printf("loraDeviceAddress: 0x%02X 0x%02X\r\n", deviceInfo.loraDeviceAddress_H,deviceInfo.loraDeviceAddress_L);
-    //
-    // }
     // 命令为IDLE,且步骤为STEP_INIT 说明有新数据。
     if (GET_CMD( deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_VERIFY) {
       E52_Analyze_Data();
     }
 
     // 检查是否接收到"请求蓝牙数据"命令,且定时器处于就绪状态
-    if (GET_CMD( deviceInfo.commandFromCloud)  == REQUEST_BLUETOOTH_DATA) {
+    if (GET_CMD( deviceInfo.commandFromCloud)  == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline) {
 
       switch (GET_STEP(deviceInfo.commandFromCloud)) {
         case REQUEST_BLUETOOTH_DATA_SCAN:
@@ -338,12 +317,14 @@ int main(void)
           printf("收到未知步骤,忽略处理\r\n");
           break;
       }
+    }
 
-      // if (deviceInfo.timeCount >= deviceInfo.forwardBLAndLoraDataDuration) {
-      //
-      // }else {
-      //
-      // }
+    if (!deviceInfo.isOnline){
+        printf("The device is not online.\r\n");
+        if (!deviceInfo.loraSendSuccessFlag) {
+          E52_Heartbeat_Fun();
+        }
+        HAL_Delay(3000);
     }
   }
   /* USER CODE END 3 */
@@ -573,17 +554,6 @@ static void MX_GPIO_Init(void)
 }
 
 /* USER CODE BEGIN 4 */
-// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
-// {
-//   // if (huart->Instance == USART2) // 判断是USART2
-//   // {
-//   //   // 这里处理接收到的数据,例如打印出来
-//   //   // printf("USART2 Received: %s\r\n", uart2_rx_byte);
-//   //
-//   //   // 继续接收下一个字节
-//   //   HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
-//   // }
-// }
 
 /* USER CODE END 4 */
 

+ 0 - 24
Core/Src/stm32f1xx_it.c

@@ -315,34 +315,12 @@ void USART2_IRQHandler(void)
       deviceInfo.loraSendSuccessFlag = 0;
       memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
     }else if (rx_buf_uart2[3] == deviceInfo.loraDeviceAddress_H && rx_buf_uart2[4] == deviceInfo.loraDeviceAddress_L){
-      // deviceInfo.newLoraDataFlag = 1;
       deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_VERIFY);  //初始化  命令和步骤。说明有新数据过来
     }else {
       memset(rx_buf_uart2, 0, sizeof(rx_buf_uart2));
     }
     // 重新开启 DMA 接收
     HAL_UART_Receive_DMA(&huart2, rx_buf_uart2, sizeof(rx_buf_uart2));
-    // // 计算接收到的数据长度
-    // uint32_t received_len = sizeof(rx_buf_uart2) - __HAL_DMA_GET_COUNTER(huart2.hdmarx);
-    //
-    // // 检查是否收到 "SUCCESS"
-    // if (received_len >= 7 && strncmp((char *)rx_buf_uart2, "SUCCESS", 7) == 0 && workMode == 1)
-    // {
-    //   // TODO: 收到 SUCCESS 后执行的代码
-    //   printf("发生成功:%s\r\n",rx_buf_uart2);
-    //   loraSendNextDataFlag = 0;
-    // }else if (workMode == 1 && rx_buf_uart2[0] != 0xC3) {
-    //   printf("err:%s",rx_buf_uart2);
-    //   if (loraSendNextDataFlag > 3)
-    //   {
-    //     // loraSendNextDataFlag = 99;//0表示发送成功。99表示发送超时。 >0 <99表示发送失败,重新发送。
-    //     printf("发送数据:失败。继续发生下一个数据\r\n");
-    //   }else {
-    //     loraSendNextDataFlag++;
-    //   }
-    // }
-
-
   }
 
   /* USER CODE BEGIN USART2_IRQn 1 */
@@ -369,7 +347,6 @@ void USART3_IRQHandler(void)
 
     if (strncmp((char *)rx_buf, "AT", 2) != 0) {
       if (deviceInfo.BlDataFlag == BL_START) {
-        // E52_Send_Bl_Data_Fun();
         if (receiveBlDataCount < 115)
         {
           memcpy(totalData[receiveBlDataCount], rx_buf, received_len);
@@ -378,7 +355,6 @@ void USART3_IRQHandler(void)
           HAL_UART_Receive_DMA(&huart3, rx_buf, received_len); // 重新启动
         }
       }else if (deviceInfo.BlDataFlag == BL_STOP) {
-        // E52_Send_SOS_Fun();
       }
     }