Ver Fonte

保存地址到flash中,有点奇怪

xuxinyi há 2 meses atrás
pai
commit
44958d0839
3 ficheiros alterados com 58 adições e 41 exclusões
  1. 2 0
      Core/Inc/main.h
  2. 55 41
      Core/Src/main.c
  3. 1 0
      Core/Src/stm32f1xx_it.c

+ 2 - 0
Core/Inc/main.h

@@ -84,6 +84,8 @@ extern UART_HandleTypeDef huart1;
 extern UART_HandleTypeDef huart2;
 extern UART_HandleTypeDef huart3;
 extern DMA_HandleTypeDef hdma_usart2_rx;
+
+void Flash_Write_LoraAddr(uint8_t addrH, uint8_t addrL);
 /* USER CODE END Private defines */
 
 #ifdef __cplusplus

+ 55 - 41
Core/Src/main.c

@@ -262,15 +262,15 @@ int main(void)
   powerOn();
   E52_CtlPowerOn_Fun();
 
-  deviceInfo.loraDeviceAddress_H = 0xFE;
-  deviceInfo.loraDeviceAddress_L = 0xE1;
-  Flash_Write_LoraAddr(deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
-  uint8_t addrH, addrL;
-  while (TRUE) {
-    Flash_Read_LoraAddr(&addrH, &addrL);
-    printf("LoraAddr: %02X%02X\r\n", addrH, addrL);
-    HAL_Delay(1000);
-  }
+  // deviceInfo.loraDeviceAddress_H = 0xFE;
+  // deviceInfo.loraDeviceAddress_L = 0xE1;
+  // Flash_Write_LoraAddr(deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
+  // uint8_t addrH, addrL;
+  // while (TRUE) {
+  //   Flash_Read_LoraAddr(&addrH, &addrL);
+  //   printf("LoraAddr: %02X%02X\r\n", addrH, addrL);
+  //   HAL_Delay(1000);
+  // }
   // 在需要设置RTC时间的地方直接调用
   // 参数依次为:小时、分钟、秒、星期、月份、日期、年份(均为BCD格式)
   RTC_SetDateTime(&hrtc,
@@ -287,36 +287,50 @@ int main(void)
   __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
   HAL_UART_Receive_DMA(&huart2, rx_buf_uart2_DMA, sizeof(rx_buf_uart2_DMA));
   __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
-  printf("开始初始化1\r\n");
-  HAL_Delay(4000);
-  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);
-  Device_Info_Init_Fun();
-  printf("开启Lora广播模块\r\n");
-  E52_CONFIG_BROADCAST_TYPE_FUN(BROADCAST_ALL);
-  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_msg3 = "AT+HEAD=0";
-  HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg3, strlen(lora_msg3), HAL_MAX_DELAY);
-  HAL_Delay(2000);
-  const char *lora_msg4 = "AT+SRC_ADDR=?";
-  HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg4, strlen(lora_msg4), HAL_MAX_DELAY);
-  HAL_Delay(2000);
+  Flash_Read_LoraAddr(&deviceInfo.loraDeviceAddress_H, &deviceInfo.loraDeviceAddress_L);
+  printf("deviceInfo.loraDeviceAddress_H:%02X,deviceInfo.loraDeviceAddress_L:%02X\r\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
+  if (deviceInfo.loraDeviceAddress_H == 0xFF || deviceInfo.loraDeviceAddress_L == 0xFF || deviceInfo.loraDeviceAddress_H == 0x00 || deviceInfo.loraDeviceAddress_L == 0x00) { // 未设置Lora地址,应该是初次启动,配置Lora地址蓝牙等
+    HAL_Delay(4000);
+    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);
+    Device_Info_Init_Fun();
+    printf("开启Lora广播模块\r\n");
+    E52_CONFIG_BROADCAST_TYPE_FUN(BROADCAST_ALL);
+    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_msg3 = "AT+HEAD=0";
+    HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg3, strlen(lora_msg3), HAL_MAX_DELAY);
+    HAL_Delay(2000);
+    const char *lora_msg4 = "AT+SRC_ADDR=?";
+    HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg4, strlen(lora_msg4), HAL_MAX_DELAY);
+    HAL_Delay(2000);
+
+    while (TRUE) {
+      if (deviceInfo.loraDeviceAddress_H == 0xFF && deviceInfo.loraDeviceAddress_L == 0xFF) {
+        HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg4, strlen(lora_msg4), HAL_MAX_DELAY);
+        HAL_Delay(4000);
+      }else {
+        break;
+      }
+    }
+  }else {
+    printf("已配置\r\n");
+  }
 
   srand(HAL_GetTick());
   /* USER CODE END 2 */
@@ -339,7 +353,7 @@ int main(void)
     GPIO_PinState powerState = HAL_GPIO_ReadPin(JUGE_PIN_GPIO_Port, JUGE_PIN_Pin);
 
     if (powerState == GPIO_PIN_RESET) {
-      powerOff();
+      // powerOff();
       deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
       printf("收到未知步骤,忽略处理\r\n");
       HAL_Delay(10*60*1000);
@@ -399,7 +413,7 @@ int main(void)
       uint8_t count = 0;
       while(count < 10) {
         if (HAL_GPIO_ReadPin(JUGE_PIN_GPIO_Port, JUGE_PIN_Pin) == GPIO_PIN_RESET) {
-          powerOff();
+          // powerOff();
           break;
         }
         count++;

+ 1 - 0
Core/Src/stm32f1xx_it.c

@@ -334,6 +334,7 @@ void USART2_IRQHandler(void)
 
             deviceInfo.loraDeviceAddress_H = (addr >> 8) & 0xFF;
             deviceInfo.loraDeviceAddress_L = addr & 0xFF;
+            Flash_Write_LoraAddr(deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
           }
         }
       }