|
|
@@ -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 */
|
|
|
|