|
|
@@ -262,7 +262,7 @@ int main(void)
|
|
|
/* USER CODE BEGIN 2 */
|
|
|
|
|
|
powerOn();
|
|
|
-
|
|
|
+ adc_init();
|
|
|
|
|
|
// 启动 USART2 DMA 接收
|
|
|
HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
|
|
|
@@ -303,302 +303,63 @@ int main(void)
|
|
|
// 醒来后恢复 SysTick
|
|
|
// 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 模式后必须恢复时钟
|
|
|
+ uint16_t adcx;
|
|
|
+ float temp;
|
|
|
+ // printf("start to sleep\r\n");
|
|
|
+ // //进入睡眠模式
|
|
|
+ // HAL_SuspendTick();
|
|
|
+ // HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
|
|
+ // HAL_ResumeTick();
|
|
|
+ // SystemClock_Config(); // STOP 模式后必须恢复时钟
|
|
|
while (TRUE)
|
|
|
{
|
|
|
-
|
|
|
-
|
|
|
- // if (Mac_Addr[0] != 0)
|
|
|
+ // 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_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();
|
|
|
+ // HAL_SuspendTick();
|
|
|
+ // HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
|
|
+ // HAL_ResumeTick();
|
|
|
+ // SystemClock_Config(); // STOP 模式后必须恢复时钟
|
|
|
// }
|
|
|
- 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 模式后必须恢复时钟
|
|
|
- }
|
|
|
|
|
|
+ adcx = adc_get_result_average(ADC_ADCX_CHY, 10);
|
|
|
+ printf("adcx:%d\r\n", adcx);
|
|
|
+ float v_adc = (3.3f * adcx) / 4095.0f; // ADC电压值
|
|
|
+ printf("v_adc:%.4f\r\n", v_adc);
|
|
|
+ float v_bat = v_adc * ( (301.0f + 100.0f) / 100.0f );
|
|
|
+ printf("v_bat:%.4f\r\n", v_bat);
|
|
|
+ printf("v_adc:%.4f, v_bat:%.4f\r\n", v_adc, v_bat);
|
|
|
|
|
|
+ // temp = (float)adcx * (3.3 / 4096);
|
|
|
+ // adcx = temp;
|
|
|
+ // printf("整数部分:%d\r\n", adcx);
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // temp -= adcx;
|
|
|
+ // temp *= 1000;
|
|
|
+ // printf("小数部分 :%f\r\n", temp);
|
|
|
|
|
|
|
|
|
- // 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 */
|
|
|
+ HAL_Delay(2000);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|