|
|
@@ -65,14 +65,14 @@ uint8_t uart2_rx_byte[10] = {0};
|
|
|
uint8_t loraSendNextDataFlag = 0;
|
|
|
uint8_t baseRandomTimer = 3*60;
|
|
|
uint8_t RandomTimer= 3*60;
|
|
|
-
|
|
|
+uint8_t Mac_Addr[6];
|
|
|
RingBuffer queue1;
|
|
|
RingBuffer queue2;
|
|
|
|
|
|
// uint8_t loraDataErrorCount = 0;
|
|
|
uint8_t workMode = 0; // 0: 接收蓝牙数据 1: 使用lora发生数据 2:等待间隔时间
|
|
|
uint8_t receiveBlDataCount = 0;
|
|
|
-
|
|
|
+uint8_t key_pressed_flag = 0;
|
|
|
/* USER CODE END PV */
|
|
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
|
@@ -262,8 +262,7 @@ int main(void)
|
|
|
/* USER CODE BEGIN 2 */
|
|
|
|
|
|
powerOn();
|
|
|
- // E52_CtlPowerOn_Fun();
|
|
|
- E52_CtlPowerOff_Fun();
|
|
|
+
|
|
|
|
|
|
// 启动 USART2 DMA 接收
|
|
|
HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
|
|
|
@@ -272,7 +271,7 @@ int main(void)
|
|
|
__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
|
|
|
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);
|
|
|
- HAL_Delay(4000);
|
|
|
+ HAL_Delay(2000);
|
|
|
E104_BT5005A_ROLE1_Fun();
|
|
|
HAL_Delay(2000);
|
|
|
|
|
|
@@ -287,10 +286,12 @@ int main(void)
|
|
|
|
|
|
// E104_BT5005A_SLEEP_Fun();
|
|
|
// HAL_Delay(2000);
|
|
|
-
|
|
|
+ E104_BT5005A_MAC_Fun(); //用来打印MAC地址
|
|
|
+ HAL_Delay(2000);
|
|
|
printf("初始化复位\r\n");
|
|
|
E104_BT5005A_RESET_Fun();
|
|
|
HAL_Delay(2000);
|
|
|
+
|
|
|
E104_BT5005A_SLEEP_Fun();
|
|
|
HAL_Delay(2000);
|
|
|
|
|
|
@@ -298,254 +299,305 @@ int main(void)
|
|
|
// 进入睡眠模式,等待中断唤醒
|
|
|
// HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
|
|
// HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
|
|
- HAL_PWR_EnterSTANDBYMode();//这个是进入待机模式
|
|
|
+ // HAL_PWR_EnterSTANDBYMode();//这个是进入待机模式
|
|
|
// 醒来后恢复 SysTick
|
|
|
- HAL_ResumeTick();
|
|
|
-
|
|
|
- while (TRUE) {
|
|
|
- // HAL_Delay(1000);
|
|
|
- }
|
|
|
- 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_ROLE1_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 */
|
|
|
-
|
|
|
- /* Infinite loop */
|
|
|
- /* USER CODE BEGIN WHILE */
|
|
|
-
|
|
|
- printf("Device is ready\r\n");
|
|
|
- printf("设备地址:0x%02X%02X\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
|
|
|
- uint8_t i = 0;
|
|
|
- // uint8_t ledShanshuo = 0;
|
|
|
- while (1)
|
|
|
+ // HAL_ResumeTick();
|
|
|
+ uint8_t Count = 0;
|
|
|
+ printf("start to sleep\r\n");
|
|
|
+ //进入睡眠模式
|
|
|
+ HAL_SuspendTick();
|
|
|
+ HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
|
|
+ HAL_ResumeTick();
|
|
|
+ SystemClock_Config(); // STOP 模式后必须恢复时钟
|
|
|
+ while (TRUE)
|
|
|
{
|
|
|
- /* USER CODE END WHILE */
|
|
|
-
|
|
|
- /* USER CODE BEGIN 3 */
|
|
|
-
|
|
|
- // 检查是否接收到"心跳"命令,且设备在线
|
|
|
- if (!deviceInfo.isOnline) {
|
|
|
- RTC_TimeTypeDef now = {0};
|
|
|
- HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
|
|
|
|
- int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
|
|
|
- - (Online_struct.Hours * 3600 + Online_struct.Minutes * 60 + Online_struct.Seconds);
|
|
|
- if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
|
|
|
|
|
|
- // printf("发送上报时间 按下持续时间: %d 秒\r\n", pressedSeconds);
|
|
|
-
|
|
|
- if (pressedSeconds >= 10) {
|
|
|
- E52_Heartbeat_Fun();
|
|
|
- // printf("111111\r\n");
|
|
|
- Online_struct = now; // 记录上报时间
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (deviceInfo.isSOS) {
|
|
|
- deviceInfo.isOnline = TRUE;
|
|
|
- RTC_TimeTypeDef now = {0};
|
|
|
- HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
|
-
|
|
|
- int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
|
|
|
- - (SOS_struct.Hours * 3600 + SOS_struct.Minutes * 60 + SOS_struct.Seconds);
|
|
|
- if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
|
|
|
- printf("SOS按下时间为:%d\r\n",pressedSeconds);
|
|
|
-
|
|
|
- if (pressedSeconds >= 20) { //如果出现异常情况,导致SOS一直处于被按下情况,关闭SOS。
|
|
|
- deviceInfo.isSOS = FALSE;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (GET_CMD( deviceInfo.commandFromCloud) == IDLE || GET_STEP(deviceInfo.commandFromCloud) == STEP_INIT) {
|
|
|
- // printf("为idle状态的时间为\r\n");
|
|
|
- RTC_TimeTypeDef now = {0};
|
|
|
- HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
|
- IDLE_struct = now; // 记录上报时间
|
|
|
- }else {
|
|
|
- RTC_TimeTypeDef now = {0};
|
|
|
- HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
|
-
|
|
|
- int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
|
|
|
- - (IDLE_struct.Hours * 3600 + IDLE_struct.Minutes * 60 + IDLE_struct.Seconds);
|
|
|
- if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
|
|
|
- // printf("不为idle状态的时间为:%d\r\n",pressedSeconds);
|
|
|
-
|
|
|
- if (pressedSeconds >= 20) {
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
- // printf("111111\r\n");
|
|
|
- IDLE_struct = now; // 记录上报时间
|
|
|
+ // if (Mac_Addr[0] != 0)
|
|
|
+ // {
|
|
|
+ // E52_CtlPowerOn_Fun();
|
|
|
+ // HAL_Delay(1500);
|
|
|
+ // // for (uint8_t i = 0; i < 6; i++)
|
|
|
+ // // {
|
|
|
+ // // printf("%02x ", Mac_Addr[i]);
|
|
|
+ // // }
|
|
|
+ // // printf("\r\n");
|
|
|
+ // E52_Send_MAC_Fun(Mac_Addr, 6);
|
|
|
+ // HAL_Delay(1000);
|
|
|
+ // E52_CtlPowerOff_Fun();
|
|
|
+ // }
|
|
|
+ if (key_pressed_flag)
|
|
|
+ {
|
|
|
+ key_pressed_flag = 0; // 清除标志
|
|
|
+ Count = 0;
|
|
|
+ if (Read_LoRa_Power_Status() == 1)
|
|
|
+ {
|
|
|
+ E52_CtlPowerOn_Fun();
|
|
|
+ HAL_Delay(2000);
|
|
|
+ }
|
|
|
+ if (Mac_Addr[0] != 0)
|
|
|
+ {
|
|
|
+ printf("模块被唤醒。开始发送自身MAC地址\r\n");
|
|
|
+ E52_Send_MAC_Fun(Mac_Addr, 6);
|
|
|
+ }
|
|
|
}
|
|
|
+ HAL_Delay(100);
|
|
|
+ Count++;
|
|
|
+ if (Count == 100)
|
|
|
+ {
|
|
|
+ E52_CtlPowerOff_Fun();
|
|
|
+ HAL_SuspendTick();
|
|
|
+ HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
|
|
+ HAL_ResumeTick();
|
|
|
+ SystemClock_Config(); // STOP 模式后必须恢复时钟
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- // 解析后台命令
|
|
|
- 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 ) || deviceInfo.isSOS)) {
|
|
|
- switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
- case REQUEST_BLUETOOTH_DATA_SCAN:
|
|
|
- Timer_Managment_Fun(&htim4, TIMER_OP_START);
|
|
|
- deviceInfo.BlDataFlag = BL_START;
|
|
|
- printf("开启蓝牙扫描\r\n");
|
|
|
- break; //扫描蓝牙阶段
|
|
|
-
|
|
|
- case REQUEST_BLUETOOTH_DATA_SEND:
|
|
|
- Timer_Managment_Fun(&htim4, TIMER_OP_STOP);
|
|
|
- deviceInfo.BlDataFlag = BL_STOP;
|
|
|
- i = 0;
|
|
|
- while (receiveBlDataCount > i) {
|
|
|
-
|
|
|
- // printf("发送第%d个蓝牙数据给Lora\r\n", i);
|
|
|
- if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
- E52_Send_Bl_Data_Fun(i,0x00);
|
|
|
- }else {
|
|
|
- continue;
|
|
|
- }
|
|
|
- memset(totalData[i], 0, sizeof(totalData[i]));
|
|
|
- i++;
|
|
|
- }
|
|
|
- // printf("发送最后一位,开始发送蓝牙数据给Lora\r\n");
|
|
|
- E52_Send_Bl_Data_Fun(i,0x01);
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
|
|
|
- printf("发送完成\r\n");
|
|
|
- break; //发送数据阶段
|
|
|
- case STEP_COMPLETE:
|
|
|
- receiveBlDataCount = 0;
|
|
|
- deviceInfo.timeCount = 0;
|
|
|
- deviceInfo.forwardBLAndLoraDataDuration = 0;
|
|
|
- i = 0;
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- // 处理未知步骤
|
|
|
- if (deviceInfo.isSOS) {
|
|
|
- // HAL_Delay(1000);
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_VERIFY);
|
|
|
- rx_buf_uart2[0] = 0x55;
|
|
|
- rx_buf_uart2[1] = 0xBB;
|
|
|
- rx_buf_uart2[2] = 0x03;
|
|
|
- rx_buf_uart2[3] = deviceInfo.loraDeviceAddress_H;
|
|
|
- rx_buf_uart2[4] = deviceInfo.loraDeviceAddress_L;
|
|
|
- rx_buf_uart2[5] = 0x03;
|
|
|
- rx_buf_uart2[6] = 0xE8;
|
|
|
- rx_buf_uart2[7] = 0x00;
|
|
|
- rx_buf_uart2[8] = 0xFF;
|
|
|
- rx_buf_uart2[9] = 0xEE;
|
|
|
- }else {
|
|
|
- receiveBlDataCount = 0;
|
|
|
- deviceInfo.timeCount = 0;
|
|
|
- deviceInfo.forwardBLAndLoraDataDuration = 0;
|
|
|
- i = 0;
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 08:请求心跳数据
|
|
|
- if (GET_CMD( deviceInfo.commandFromCloud) == E52_HEARTBEAT && deviceInfo.isOnline) {
|
|
|
- switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
- case HEARTBEAT_SEND:
|
|
|
- if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
- E52_Heartbeat_Fun();
|
|
|
- }else {
|
|
|
- continue;
|
|
|
- }
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
|
|
|
- break;
|
|
|
- case STEP_COMPLETE:
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
- printf("收到未知步骤,忽略处理\r\n");
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 07:配置E52
|
|
|
- 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);
|
|
|
- HAL_Delay(2000);
|
|
|
- if (deviceInfo.broadcast_type == BROADCAST_ALL) {
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, STEP_COMPLETE); //TODO 广播,直接结束.或者进入测试流程。
|
|
|
- }else {
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, CONFIGURE_E52_SET_LORA_ADDRESS); //第三步,配置Lora地址
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case CONFIGURE_E52_SET_LORA_ADDRESS:
|
|
|
- E104_BT5005A_DST_ADDR_Fun();
|
|
|
- HAL_Delay(2000);
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, STEP_COMPLETE); //TODO 广播,直接结束.或者进入测试流程。
|
|
|
- break; //如果是单波,多播,配置目标地址
|
|
|
-
|
|
|
- case STEP_COMPLETE:
|
|
|
- if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
- E52_Heartbeat_Fun();
|
|
|
- }else {
|
|
|
- continue;
|
|
|
- }
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- printf("未知配置命令\r\n");
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
- ;break;
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
+ // HAL_Delay(1000);
|
|
|
}
|
|
|
+ // 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_ROLE1_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 */
|
|
|
+ //
|
|
|
+ // /* Infinite loop */
|
|
|
+ // /* USER CODE BEGIN WHILE */
|
|
|
+ //
|
|
|
+ // printf("Device is ready\r\n");
|
|
|
+ // printf("设备地址:0x%02X%02X\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
|
|
|
+ // uint8_t i = 0;
|
|
|
+ // // uint8_t ledShanshuo = 0;
|
|
|
+ // while (1)
|
|
|
+ // {
|
|
|
+ // /* USER CODE END WHILE */
|
|
|
+ //
|
|
|
+ // /* USER CODE BEGIN 3 */
|
|
|
+ //
|
|
|
+ // // 检查是否接收到"心跳"命令,且设备在线
|
|
|
+ // if (!deviceInfo.isOnline) {
|
|
|
+ // RTC_TimeTypeDef now = {0};
|
|
|
+ // HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
|
+ //
|
|
|
+ // int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
|
|
|
+ // - (Online_struct.Hours * 3600 + Online_struct.Minutes * 60 + Online_struct.Seconds);
|
|
|
+ // if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
|
|
|
+ //
|
|
|
+ // // printf("发送上报时间 按下持续时间: %d 秒\r\n", pressedSeconds);
|
|
|
+ //
|
|
|
+ // if (pressedSeconds >= 10) {
|
|
|
+ // E52_Heartbeat_Fun();
|
|
|
+ // // printf("111111\r\n");
|
|
|
+ // Online_struct = now; // 记录上报时间
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // if (deviceInfo.isSOS) {
|
|
|
+ // deviceInfo.isOnline = TRUE;
|
|
|
+ // RTC_TimeTypeDef now = {0};
|
|
|
+ // HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
|
+ //
|
|
|
+ // int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
|
|
|
+ // - (SOS_struct.Hours * 3600 + SOS_struct.Minutes * 60 + SOS_struct.Seconds);
|
|
|
+ // if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
|
|
|
+ // printf("SOS按下时间为:%d\r\n",pressedSeconds);
|
|
|
+ //
|
|
|
+ // if (pressedSeconds >= 20) { //如果出现异常情况,导致SOS一直处于被按下情况,关闭SOS。
|
|
|
+ // deviceInfo.isSOS = FALSE;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // if (GET_CMD( deviceInfo.commandFromCloud) == IDLE || GET_STEP(deviceInfo.commandFromCloud) == STEP_INIT) {
|
|
|
+ // // printf("为idle状态的时间为\r\n");
|
|
|
+ // RTC_TimeTypeDef now = {0};
|
|
|
+ // HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
|
+ // IDLE_struct = now; // 记录上报时间
|
|
|
+ // }else {
|
|
|
+ // RTC_TimeTypeDef now = {0};
|
|
|
+ // HAL_RTC_GetTime(&hrtc, &now, RTC_FORMAT_BIN);
|
|
|
+ //
|
|
|
+ // int pressedSeconds = (now.Hours * 3600 + now.Minutes * 60 + now.Seconds)
|
|
|
+ // - (IDLE_struct.Hours * 3600 + IDLE_struct.Minutes * 60 + IDLE_struct.Seconds);
|
|
|
+ // if (pressedSeconds < 0) pressedSeconds += 24 * 3600;
|
|
|
+ // // printf("不为idle状态的时间为:%d\r\n",pressedSeconds);
|
|
|
+ //
|
|
|
+ // if (pressedSeconds >= 20) {
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
+ // // printf("111111\r\n");
|
|
|
+ // IDLE_struct = now; // 记录上报时间
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // // 解析后台命令
|
|
|
+ // 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 ) || deviceInfo.isSOS)) {
|
|
|
+ // switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
+ // case REQUEST_BLUETOOTH_DATA_SCAN:
|
|
|
+ // Timer_Managment_Fun(&htim4, TIMER_OP_START);
|
|
|
+ // deviceInfo.BlDataFlag = BL_START;
|
|
|
+ // printf("开启蓝牙扫描\r\n");
|
|
|
+ // break; //扫描蓝牙阶段
|
|
|
+ //
|
|
|
+ // case REQUEST_BLUETOOTH_DATA_SEND:
|
|
|
+ // Timer_Managment_Fun(&htim4, TIMER_OP_STOP);
|
|
|
+ // deviceInfo.BlDataFlag = BL_STOP;
|
|
|
+ // i = 0;
|
|
|
+ // while (receiveBlDataCount > i) {
|
|
|
+ //
|
|
|
+ // // printf("发送第%d个蓝牙数据给Lora\r\n", i);
|
|
|
+ // if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
+ // E52_Send_Bl_Data_Fun(i,0x00);
|
|
|
+ // }else {
|
|
|
+ // continue;
|
|
|
+ // }
|
|
|
+ // memset(totalData[i], 0, sizeof(totalData[i]));
|
|
|
+ // i++;
|
|
|
+ // }
|
|
|
+ // // printf("发送最后一位,开始发送蓝牙数据给Lora\r\n");
|
|
|
+ // E52_Send_Bl_Data_Fun(i,0x01);
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
|
|
|
+ // printf("发送完成\r\n");
|
|
|
+ // break; //发送数据阶段
|
|
|
+ // case STEP_COMPLETE:
|
|
|
+ // receiveBlDataCount = 0;
|
|
|
+ // deviceInfo.timeCount = 0;
|
|
|
+ // deviceInfo.forwardBLAndLoraDataDuration = 0;
|
|
|
+ // i = 0;
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
+ // break;
|
|
|
+ //
|
|
|
+ // default:
|
|
|
+ // // 处理未知步骤
|
|
|
+ // if (deviceInfo.isSOS) {
|
|
|
+ // // HAL_Delay(1000);
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_VERIFY);
|
|
|
+ // rx_buf_uart2[0] = 0x55;
|
|
|
+ // rx_buf_uart2[1] = 0xBB;
|
|
|
+ // rx_buf_uart2[2] = 0x03;
|
|
|
+ // rx_buf_uart2[3] = deviceInfo.loraDeviceAddress_H;
|
|
|
+ // rx_buf_uart2[4] = deviceInfo.loraDeviceAddress_L;
|
|
|
+ // rx_buf_uart2[5] = 0x03;
|
|
|
+ // rx_buf_uart2[6] = 0xE8;
|
|
|
+ // rx_buf_uart2[7] = 0x00;
|
|
|
+ // rx_buf_uart2[8] = 0xFF;
|
|
|
+ // rx_buf_uart2[9] = 0xEE;
|
|
|
+ // }else {
|
|
|
+ // receiveBlDataCount = 0;
|
|
|
+ // deviceInfo.timeCount = 0;
|
|
|
+ // deviceInfo.forwardBLAndLoraDataDuration = 0;
|
|
|
+ // i = 0;
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
+ // }
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 08:请求心跳数据
|
|
|
+ // if (GET_CMD( deviceInfo.commandFromCloud) == E52_HEARTBEAT && deviceInfo.isOnline) {
|
|
|
+ // switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
+ // case HEARTBEAT_SEND:
|
|
|
+ // if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
+ // E52_Heartbeat_Fun();
|
|
|
+ // }else {
|
|
|
+ // continue;
|
|
|
+ // }
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
|
|
|
+ // break;
|
|
|
+ // case STEP_COMPLETE:
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
+ // break;
|
|
|
+ //
|
|
|
+ // default:
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
+ // printf("收到未知步骤,忽略处理\r\n");
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 07:配置E52
|
|
|
+ // 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);
|
|
|
+ // HAL_Delay(2000);
|
|
|
+ // if (deviceInfo.broadcast_type == BROADCAST_ALL) {
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, STEP_COMPLETE); //TODO 广播,直接结束.或者进入测试流程。
|
|
|
+ // }else {
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, CONFIGURE_E52_SET_LORA_ADDRESS); //第三步,配置Lora地址
|
|
|
+ // }
|
|
|
+ // break;
|
|
|
+ //
|
|
|
+ // case CONFIGURE_E52_SET_LORA_ADDRESS:
|
|
|
+ // E104_BT5005A_DST_ADDR_Fun();
|
|
|
+ // HAL_Delay(2000);
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(CONFIGURE_E52, STEP_COMPLETE); //TODO 广播,直接结束.或者进入测试流程。
|
|
|
+ // break; //如果是单波,多播,配置目标地址
|
|
|
+ //
|
|
|
+ // case STEP_COMPLETE:
|
|
|
+ // if (deviceInfo.loraSendSuccessFlag == 0) {
|
|
|
+ // E52_Heartbeat_Fun();
|
|
|
+ // }else {
|
|
|
+ // continue;
|
|
|
+ // }
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
+ // break;
|
|
|
+ //
|
|
|
+ // default:
|
|
|
+ // printf("未知配置命令\r\n");
|
|
|
+ // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
+ // ;break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ // }
|
|
|
/* USER CODE END 3 */
|
|
|
}
|
|
|
|
|
|
@@ -839,14 +891,15 @@ static void MX_GPIO_Init(void)
|
|
|
HAL_GPIO_WritePin(POWER_ON_GPIO_Port, POWER_ON_Pin, GPIO_PIN_SET);
|
|
|
|
|
|
/*Configure GPIO pin Output Level */
|
|
|
- HAL_GPIO_WritePin(CTL_LORA_POWER_GPIO_Port, CTL_LORA_POWER_Pin, GPIO_PIN_RESET);
|
|
|
+ HAL_GPIO_WritePin(CTL_LORA_POWER_GPIO_Port, CTL_LORA_POWER_Pin, GPIO_PIN_SET);
|
|
|
|
|
|
/*Configure GPIO pin Output Level */
|
|
|
HAL_GPIO_WritePin(PowerLED_GPIO_Port, PowerLED_Pin, GPIO_PIN_RESET);
|
|
|
|
|
|
/*Configure GPIO pins : SOS_KEY_Pin JUGE_PIN_Pin */
|
|
|
GPIO_InitStruct.Pin = SOS_KEY_Pin|JUGE_PIN_Pin;
|
|
|
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
|
|
|
+ // GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; // 上升沿和下降沿都触发中断
|
|
|
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // 上升沿触发中断
|
|
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
|
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
|
|