From b13574876322e59f75f26ac38f72c6b19c9d4aba Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期五, 27 六月 2025 14:02:08 +0800
Subject: [PATCH] 刚解决完网关下发会导致异常问题,但蓝牙那边mk给蓝牙发未配置成功未解决,开始调lora功耗

---
 keil/include/main/main.c                 |   14 +-
 keil/include/src/Radio/lora_1268.c       |   28 ++--
 keil/include/drivers/serial_at_cmd_app.c |  284 +++++++++++++++++++++++-----------------------
 3 files changed, 166 insertions(+), 160 deletions(-)

diff --git a/keil/include/drivers/serial_at_cmd_app.c b/keil/include/drivers/serial_at_cmd_app.c
index d1ad26a..4813082 100644
--- a/keil/include/drivers/serial_at_cmd_app.c
+++ b/keil/include/drivers/serial_at_cmd_app.c
@@ -521,159 +521,161 @@
 	memcpy(&send_frame[8],&set_mk_time,2);
 	checksum=Checksum_u16(&send_frame[2],8);
 	memcpy(&send_frame[10],&checksum,2);
+		//LOG_INFO(TRACE_MODULE_APP,"发给ble的checksum %#x\r\n",checksum);
 	uart_send(UART_ID0, send_frame,12, NULL);	
+	uart_send(UART_ID1, send_frame,12, NULL);
 }
 extern uint8_t bat_percent;
 extern uint32_t dev_id;
 
 void Usart0ParseDataHandler(uint8_t data)//UART蓝牙数据分析处理
 {
-//		// 全局变量
-//static Usart0ReceiveState usart0_receive_state = Usart0ReceiveWaitHead0;
+		// 全局变量
+static Usart0ReceiveState usart0_receive_state = Usart0ReceiveWaitHead0;
 
-//static uint8_t index = 0;               // 缓冲区索引
-//static uint8_t pack_cmd_type = 0;       // 指令类型
-//static uint8_t pack_msg_type = 0;       // 消息类型
-//static uint8_t pack_data_len = 0;       // 数据长度
-//static uint8_t pack_param_addr = 0;     // 参数地址
-//static uint16_t pack_checksum = 0;      // 接收到的校验和
-//static uint16_t calculated_checksum = 0; // 计算得到的校验和
-//static uint8_t send_frame[256];  // 用于计算校验和的帧
-//static uint8_t frame_index = 0;  // 帧缓冲区索引
-//static uint8_t pack_datalen = 0;
-//    
-//	LOG_INFO(TRACE_MODULE_APP,"收到 %#x\r\n",data);
-//    switch(usart0_receive_state) {
-//        case Usart0ReceiveWaitHead0:
-//            if(data == 0x55) {
-//                usart0_receive_state = Usart0ReceiveWaitHead1;
-//                // 初始化帧缓冲区
-//                frame_index = 0;
-//                send_frame[frame_index++] = data;
-//            }
-//            break;
-//            
-//        case Usart0ReceiveWaitHead1:
-//            if(data == 0xAA) {
-//                usart0_receive_state = Usart0ReceiveWaitCmdType;
-//                send_frame[frame_index++] = data;
-//            } else {
-//                usart0_receive_state = Usart0ReceiveWaitHead0;
-//            }
-//            break;
-//            
-//        case Usart0ReceiveWaitCmdType:
-//            if(data == 64) {
-//                pack_cmd_type = data;
-//                usart0_receive_state = Usart0ReceiveWaitMsgType;
-//                send_frame[frame_index++] = data;
-//            } else {
-//                usart0_receive_state = Usart0ReceiveWaitHead0;
-//            }
-//            break;
-//            
-//        case Usart0ReceiveWaitMsgType:
-//            if(data == 0x2||data==0x1) {  // 读写回复消息类型
-//                pack_msg_type = data;
-//                usart0_receive_state = Usart0ReceiveWaitDataLen;
-//                send_frame[frame_index++] = data;
-//            } else {
-//                usart0_receive_state = Usart0ReceiveWaitHead0;
-//            }
-//            break;
-//            
-//        case Usart0ReceiveWaitDataLen:
-//            pack_data_len = data;
-//            index = 0;
-//            usart0_receive_state = Usart0ReceiveWaitData;
+static uint8_t index = 0;               // 缓冲区索引
+static uint8_t pack_cmd_type = 0;       // 指令类型
+static uint8_t pack_msg_type = 0;       // 消息类型
+static uint8_t pack_data_len = 0;       // 数据长度
+static uint8_t pack_param_addr = 0;     // 参数地址
+static uint16_t pack_checksum = 0;      // 接收到的校验和
+static uint16_t calculated_checksum = 0; // 计算得到的校验和
+static uint8_t send_frame[256];  // 用于计算校验和的帧
+static uint8_t frame_index = 0;  // 帧缓冲区索引
+static uint8_t pack_datalen = 0;
+    
+	LOG_INFO(TRACE_MODULE_APP,"收到 %#x\r\n",data);
+    switch(usart0_receive_state) {
+        case Usart0ReceiveWaitHead0:
+            if(data == 0x55) {
+                usart0_receive_state = Usart0ReceiveWaitHead1;
+                // 初始化帧缓冲区
+                frame_index = 0;
+                send_frame[frame_index++] = data;
+            }
+            break;
+            
+        case Usart0ReceiveWaitHead1:
+            if(data == 0xAA) {
+                usart0_receive_state = Usart0ReceiveWaitCmdType;
+                send_frame[frame_index++] = data;
+            } else {
+                usart0_receive_state = Usart0ReceiveWaitHead0;
+            }
+            break;
+            
+        case Usart0ReceiveWaitCmdType:
+            if(data == 64) {
+                pack_cmd_type = data;
+                usart0_receive_state = Usart0ReceiveWaitMsgType;
+                send_frame[frame_index++] = data;
+            } else {
+                usart0_receive_state = Usart0ReceiveWaitHead0;
+            }
+            break;
+            
+        case Usart0ReceiveWaitMsgType:
+            if(data == 0x2||data==0x1) {  // 读写回复消息类型
+                pack_msg_type = data;
+                usart0_receive_state = Usart0ReceiveWaitDataLen;
+                send_frame[frame_index++] = data;
+            } else {
+                usart0_receive_state = Usart0ReceiveWaitHead0;
+            }
+            break;
+            
+        case Usart0ReceiveWaitDataLen:
+            pack_data_len = data;
+            index = 0;
+            usart0_receive_state = Usart0ReceiveWaitData;
+            send_frame[frame_index++] = data;
+            break;
+            
+//        case Usart0ReceiveWaitParamAddr:
+//            pack_param_addr = data;
+//						if(pack_msg_type==CMD_READ)
+//						{
+//							usart0_receive_state = Usart0ReceiveWaitChecksum1;
+//							pack_datalen=pack_data_len-6;
+//						}else{
+//							usart0_receive_state = Usart0ReceiveWaitData;
+//						}
 //            send_frame[frame_index++] = data;
 //            break;
-//            
-////        case Usart0ReceiveWaitParamAddr:
-////            pack_param_addr = data;
-////						if(pack_msg_type==CMD_READ)
-////						{
-////							usart0_receive_state = Usart0ReceiveWaitChecksum1;
-////							pack_datalen=pack_data_len-6;
-////						}else{
-////							usart0_receive_state = Usart0ReceiveWaitData;
-////						}
-////            send_frame[frame_index++] = data;
-////            break;
-//            
-//        case Usart0ReceiveWaitData:
-//							send_frame[frame_index++] = data;
-//						mUsart2ReceivePack[index++] = data;
-//            
-//							if(index == pack_data_len-3) {
-//                usart0_receive_state = Usart0ReceiveWaitChecksum1;
-//								//pack_datalen=pack_data_len;
-//              }
-//            break;
-//            
-//        case Usart0ReceiveWaitChecksum1:
-//            pack_checksum = data;  // 高字节
-//						pack_checksum_test = data;  // 高字节
-//						send_frame[frame_index++] = data;
-//					usart0_receive_state = Usart0ReceiveWaitChecksum2;
-//					LOG_INFO(TRACE_MODULE_APP,"收到校验1 %#x\r\n",data);
-//						break;
-//				case Usart0ReceiveWaitChecksum2:
-//            pack_checksum |= data<<8;  // 低字节
-//            pack_checksum_test |= data<<8;  // 低字节
-//				LOG_INFO(TRACE_MODULE_APP,"收到校验2 %#x\r\n",data);
-//            // 计算校验和 (从第3个字节开始,长度为4+数据长度)
-////						if(pack_msg_type!=CMD_REPLY)
-////            {
-//						calculated_checksum = Checksum_u16(&send_frame[2],pack_data_len);
-////						}else{
-////						//calculated_checksum = Checksum_u16(&send_frame[2],4);
-////							
-////						}
-//            test_calculate=calculated_checksum;
-//					LOG_INFO(TRACE_MODULE_APP,"收到校验 %#x,%#x\r\n",calculated_checksum,pack_checksum);
-//            // 验证校验和
-//            if(pack_checksum == calculated_checksum) {
-//                // 校验通过,处理数据
-//									switch(pack_msg_type)
-//										{	
-//										case CMD_BLE_TO_MK:
-//										memcpy(&dev_id,&mUsart2ReceivePack[0],2);
-//										bat_percent=mUsart2ReceivePack[2];
-//										memcpy(&set_mk_time,&mUsart2ReceivePack[3],2);
-//										memcpy(&g_com_map[DEV_ID],&dev_id,2);
-//										memcpy(&g_com_map[SET_START_TIME],&set_mk_time,2);
-//										Send_Reply_To_Ble();
-//										LOG_INFO(TRACE_MODULE_APP,"收到蓝牙数据 set_mk_time %d,dev_id %04x,bat_percent %d\r\n",set_mk_time,dev_id,bat_percent);
-//											save_com_map_to_flash();
-//											//memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen);
-//										
+            
+        case Usart0ReceiveWaitData:
+							send_frame[frame_index++] = data;
+						mUsart2ReceivePack[index++] = data;
+            
+							if(index == pack_data_len-3) {
+                usart0_receive_state = Usart0ReceiveWaitChecksum1;
+								//pack_datalen=pack_data_len;
+              }
+            break;
+            
+        case Usart0ReceiveWaitChecksum1:
+            pack_checksum = data;  // 高字节
+						pack_checksum_test = data;  // 高字节
+						send_frame[frame_index++] = data;
+					usart0_receive_state = Usart0ReceiveWaitChecksum2;
+					LOG_INFO(TRACE_MODULE_APP,"收到校验1 %#x\r\n",data);
+						break;
+				case Usart0ReceiveWaitChecksum2:
+            pack_checksum |= data<<8;  // 低字节
+            pack_checksum_test |= data<<8;  // 低字节
+				LOG_INFO(TRACE_MODULE_APP,"收到校验2 %#x\r\n",data);
+            // 计算校验和 (从第3个字节开始,长度为4+数据长度)
+//						if(pack_msg_type!=CMD_REPLY)
+//            {
+						calculated_checksum = Checksum_u16(&send_frame[2],pack_data_len);
+//						}else{
+//						//calculated_checksum = Checksum_u16(&send_frame[2],4);
+//							
+//						}
+            test_calculate=calculated_checksum;
+					LOG_INFO(TRACE_MODULE_APP,"收到校验 %#x,%#x\r\n",calculated_checksum,pack_checksum);
+            // 验证校验和
+            if(pack_checksum == calculated_checksum) {
+                // 校验通过,处理数据
+									switch(pack_msg_type)
+										{	
+										case CMD_BLE_TO_MK:
+										memcpy(&dev_id,&mUsart2ReceivePack[0],2);
+										bat_percent=mUsart2ReceivePack[2];
+										memcpy(&set_mk_time,&mUsart2ReceivePack[3],2);
+										memcpy(&g_com_map[DEV_ID],&dev_id,2);
+										memcpy(&g_com_map[SET_START_TIME],&set_mk_time,2);
+										Send_Reply_To_Ble();
+										LOG_INFO(TRACE_MODULE_APP,"收到蓝牙数据 set_mk_time %d,dev_id %04x,bat_percent %d\r\n",set_mk_time,dev_id,bat_percent);
+											save_com_map_to_flash();
+											//memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen);
+										
 
+											break;
+//										case CMD_MK_TO_BLE:
+//													//uart0_send_ComMap_to_BLE(pack_datalen,pack_param_addr);	
+//												
 //											break;
-////										case CMD_MK_TO_BLE:
-////													//uart0_send_ComMap_to_BLE(pack_datalen,pack_param_addr);	
-////												
+////										case CMD_REPLY:
+////											memcpy((uint8_t*)&g_com_map + pack_param_addr, mUsart2ReceivePack, pack_datalen);
+////											save_com_map_to_flash();
 ////											break;
-//////										case CMD_REPLY:
-//////											memcpy((uint8_t*)&g_com_map + pack_param_addr, mUsart2ReceivePack, pack_datalen);
-//////											save_com_map_to_flash();
-//////											break;
-//										default:
-//											break;
-//									}
-//            }
-//            
-//            // 重置状态机
-//            usart0_receive_state = Usart0ReceiveWaitHead0;
-//            index = 0;
-//            frame_index = 0;
-//            break;
-//            
-//        default:
-//            usart0_receive_state = Usart0ReceiveWaitHead0;
-//            index = 0;
-//            frame_index = 0;
-//            break;
-//    }
+										default:
+											break;
+									}
+            }
+            
+            // 重置状态机
+            usart0_receive_state = Usart0ReceiveWaitHead0;
+            index = 0;
+            frame_index = 0;
+            break;
+            
+        default:
+            usart0_receive_state = Usart0ReceiveWaitHead0;
+            index = 0;
+            frame_index = 0;
+            break;
+    }
 
 }
diff --git a/keil/include/main/main.c b/keil/include/main/main.c
index 63c43e5..03c07bf 100644
--- a/keil/include/main/main.c
+++ b/keil/include/main/main.c
@@ -507,12 +507,12 @@
 					//Lora_Tx_Poll();
         }
 				Lora_Tx_Poll();	
-				if(!gpio_pin_get_val(SLEEP_PIN))
-				{
-				//gpio_pin_clr(LORA_NRST);//lora休眠
-				LOG_INFO(TRACE_MODULE_APP, "进入休眠模式\r\n");
-				mcu_deep_sleep();
-				}
+//				if(!gpio_pin_get_val(SLEEP_PIN))
+//				{
+//				//gpio_pin_clr(LORA_NRST);//lora休眠
+//				LOG_INFO(TRACE_MODULE_APP, "进入休眠模式\r\n");
+//				mcu_deep_sleep();
+//				}
 				IdleTask();
 				}
 	}    
@@ -521,7 +521,7 @@
 	LOG_INFO(TRACE_MODULE_APP, "进入休眠模式\r\n");
 	//gpio_pin_clr(LORA_NRST);//lora休眠
 //	spi_close(SPI_ID0);
-	//lora_in_sleep();
+	lora_in_sleep();
 	 power_init();
 	mcu_deep_sleep();
 }
diff --git a/keil/include/src/Radio/lora_1268.c b/keil/include/src/Radio/lora_1268.c
index e3c848a..dccdedf 100644
--- a/keil/include/src/Radio/lora_1268.c
+++ b/keil/include/src/Radio/lora_1268.c
@@ -370,7 +370,8 @@
 //	gpio_pin_clr(LORA_IRQ);
 	//gpio_pin_clr(LORA_NRST);
 	//gpio_pin_clr(LORA_NRST);//lora休眠
-	 Radio.Standby();
+//	 Radio.Standby();
+	
     Radio.Sleep();
 }
 ////States_t State = LOWPOWER;
@@ -396,8 +397,9 @@
 		
     if(flag_writepara_needreset) //配置写入完成设备需要重启
     {
-        printf("网关下发配置写入完成,重启");
-        SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
+        LOG_INFO(TRACE_MODULE_APP,"网关下发配置写入完成,重启\r\n");
+//        SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader   
+			sys_reset(0);
     }
     Radio.Standby();
     if(LoraUp_flag)
@@ -445,6 +447,7 @@
 uint8_t rxdone=0;
 extern uint16_t set_mk_time;
 extern mk_send_message_to_BLE(void);
+uint8_t tt4=1;
 void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
 {  
 				uint16_t checksum1;
@@ -522,6 +525,7 @@
 															LoraSendComMap(WGRSP_RWTAG_READ);
 															break;
 												case WGRSP_RWTAG_WRITE:
+
 														rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
 													switch(rec_index)
 															{
@@ -534,18 +538,17 @@
                         default :
                             memcpy(&rec_value,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
                             g_com_map[rec_index/2] = rec_value;
-//														if(rec_index/2==POWER)//新增判断
-//														{
-//														 memcpy(&set_mk_time,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
-//															//mk_send_message_to_BLE();	//发送给蓝牙
-//															//LOG_INFO(TRACE_MODULE_APP, "修改成功g_com表为%#x,时间为%#x\r\n",g_com_map[POWER],set_mk_time);
-//														}
-                           // save_com_map_to_flash();
+														if(rec_index/2==POWER)//新增判断
+														{
+														 memcpy(&set_mk_time,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
+															mk_send_message_to_BLE();	//发送给蓝牙
+															//LOG_INFO(TRACE_MODULE_APP, "修改成功g_com表为%#x,时间为%#x\r\n",g_com_map[POWER],set_mk_time);
+														}
+                            save_com_map_to_flash();
                             LoraRspWriteCommap(SUBMSG_WRITE_ANCPARA);
                             flag_writepara_needreset = 1;
                             no_rx_flag = 1;                           
 															}
-
 															break; 
 												case WGRSP_RWTAG_UPDATE:
 												rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
@@ -571,7 +574,7 @@
 								}
 
 							}
-LOG_INFO(TRACE_MODULE_APP, "进入回复2\r\n");						
+			
     if(!no_rx_flag)
     {
         if(lora_jianting_flag&&LoraUp_flag==0)
@@ -580,6 +583,7 @@
             Radio.Rx(0);
         }
     }
+		
 }
 
 void OnTxTimeout( void )

--
Gitblit v1.9.3