Quellcode durchsuchen

添加中继命令处理器框架

xuxinyi vor 1 Monat
Ursprung
Commit
e3e15e05e3
5 geänderte Dateien mit 38 neuen und 4 gelöschten Zeilen
  1. 4 1
      Core/Inc/E52.h
  2. 17 0
      Core/Src/E52.c
  3. 6 2
      Core/Src/main.c
  4. 6 0
      Core/Src/stm32f1xx_it.c
  5. 5 1
      README.md

+ 4 - 1
Core/Inc/E52.h

@@ -122,7 +122,8 @@ typedef struct {
     uint8_t  timerEnable;           //定时器使能
     uint16_t timeCount;             //定时器计数
     uint16_t forwardBLAndLoraDataDuration;   //转发蓝牙数据持续时间高位ms
-    RingBuffer queueBLData;
+    RingBuffer queueBLData;                 //蓝牙数据队列
+    RingBuffer queueLoraCommandData;        //命令数据队列
     // RingBuffer queueSenderData;
 
 } Device_structure;
@@ -194,4 +195,6 @@ void E104_BT5005A_DST_ADDR_Fun(void);
 void E52_CtlPowerOn_Fun();
 //关闭lora电源
 void E52_CtlPowerOff_Fun();
+
+void schedule_Fun(void);
 #endif //E52_H

+ 17 - 0
Core/Src/E52.c

@@ -222,7 +222,24 @@ void E52_Analyze_Data() {
     }
 }
 
+void schedule_Fun() {
 
+    if (deviceInfo.isOnline) {
+
+    }
+
+    if (GET_CMD(deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_INIT) {
+
+    }
+    uint8_t command[DATA_SIZE];
+    // 先出队一个数据腾出空间
+    if (RingBuffer_Dequeue(&deviceInfo.queueBLData, command) == 0) {
+        E52_Analyze_Data();
+    }else {
+        //如果队列为空,则进入初始化状态
+        deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+    }
+}
 
 
 

+ 6 - 2
Core/Src/main.c

@@ -90,6 +90,10 @@ int __io_putchar(int ch)
 }
 
 void Device_Info_Init_Fun() {
+  //初始化环形缓冲区
+  RingBuffer_Init(&deviceInfo.queueBLData);
+  RingBuffer_Init(&deviceInfo.queueLoraCommandData);
+
   deviceInfo.isOnline = FALSE;
   deviceInfo.isSOS = FALSE;
   deviceInfo.broadcast_type = BROADCAST_ALL;
@@ -268,8 +272,6 @@ int main(void)
 
   powerOn();
   E52_CtlPowerOn_Fun();
-  //初始化环形缓冲区
-  RingBuffer_Init(&deviceInfo.queueBLData);
   Device_Info_Init_Fun();
   // 启动 USART2 DMA 接收
   HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
@@ -337,6 +339,8 @@ int main(void)
 
     // 检查是否接收到"心跳"命令,且设备在线
     printf("设备状态:0x%02X\n", deviceInfo.commandFromCloud);
+
+    schedule_Fun();
     // 心跳:不在线时,每 10 秒发一次
     if (!deviceInfo.isOnline) {
       if (IsTimeElapsed(&hrtc, &Online_struct, 10)) {

+ 6 - 0
Core/Src/stm32f1xx_it.c

@@ -290,6 +290,12 @@ void USART2_IRQHandler(void)
         {
           memcpy(rx_buf_uart2, rx_buf_uart2_DMA, rx_len);   // 拷贝实际接收数据
           deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_VERIFY);
+          //测试将命令加入队列
+          if (RingBuffer_Enqueue(&deviceInfo.queueLoraCommandData, rx_buf_uart2_DMA) == 0) {
+            // 入队成功
+          } else {
+            // 入队失败(已满暂停入队)
+          }
         }
         else if (rx_buf_uart2_DMA[2] == 0x0A) { //意外情况,后台控制恢复初始状态
           deviceInfo.isOnline = TRUE;

+ 5 - 1
README.md

@@ -56,4 +56,8 @@
         FF EE       : 帧尾
     }
 
-55 BB 07 FC A5 03 34 60 FF EE :配置lora
+4.配置lora
+55 BB 07 FC A5 03 34 60 FF EE :配置lora
+
+5.中继休眠
+