From 04b95840e106182266f71a549b85bcfff083deb1 Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期五, 23 五月 2025 18:07:48 +0800
Subject: [PATCH] 成功测试完毕新的蓝牙和MK的传输协议,并实现读写功能

---
 keil/include/drivers/serial_at_cmd_app.c |   73 +++++++++++++++++++++++-------------
 1 files changed, 46 insertions(+), 27 deletions(-)

diff --git a/keil/include/drivers/serial_at_cmd_app.c b/keil/include/drivers/serial_at_cmd_app.c
index aa7ce9b..236c51b 100644
--- a/keil/include/drivers/serial_at_cmd_app.c
+++ b/keil/include/drivers/serial_at_cmd_app.c
@@ -239,12 +239,12 @@
 	send_frame[4] = data_length+6;
 	send_frame[5] = index;
 	memcpy(&send_frame[6], &g_com_map[index], data_length);
-	checksum = Checksum_u16(&send_frame[2],5+data_length);
+	checksum = Checksum_u16(&send_frame[2],4+data_length);
 	memcpy(&send_frame[6+data_length],&checksum,2);
 	
 	 uart_send(UART_ID0, send_frame,data_length+8, NULL);	
 }
-void Send_Commap_mk_to_ble(uint8_t data_length, uint8_t index)
+void mk_write_to_ble(uint8_t data_length, uint8_t index)
 {
 static uint8_t send_frame[100];
 	uint16_t checksum = 0;
@@ -255,7 +255,7 @@
 	send_frame[4] = data_length+6;
 	send_frame[5] = index;
 	memcpy(&send_frame[6], &g_com_map[index], data_length);
-	checksum = Checksum_u16(&send_frame[2],5+data_length);
+	checksum = Checksum_u16(&send_frame[2],4+data_length);
 	memcpy(&send_frame[6+data_length],&checksum,2);
 	
 	 uart_send(UART_ID0, send_frame,data_length+8, NULL);	
@@ -269,11 +269,12 @@
 	send_frame[1] = 0xAA;
 	send_frame[2] = 0x40;
 	send_frame[3] = CMD_READ;
-	send_frame[4] = data_length;
+	send_frame[4] = data_length+6;
 	send_frame[5] = index;
-	checksum = Checksum_u16(&send_frame[2],5+data_length);
-	 uart_send(UART_ID0, send_frame,6, NULL);	
+	checksum = Checksum_u16(&send_frame[2],4);
+	 uart_send(UART_ID0, send_frame,8, NULL);	
 }
+uint16_t pack_checksum_test=0,test_calculate = 0; 
 void Usart0ParseDataHandler(uint8_t data)//UART蓝牙数据分析处理
 {
 		// 全局变量
@@ -310,7 +311,7 @@
             break;
             
         case Usart0ReceiveWaitCmdType:
-            if(data == 0x40) {
+            if(data == 64) {
                 pack_cmd_type = data;
                 usart0_receive_state = Usart0ReceiveWaitMsgType;
                 send_frame[frame_index++] = data;
@@ -320,7 +321,7 @@
             break;
             
         case Usart0ReceiveWaitMsgType:
-            if(data == 0x2) {  // 写消息类型
+            if(data == 0x2||data==0x1||data==0x3) {  // 读写回复消息类型
                 pack_msg_type = data;
                 usart0_receive_state = Usart0ReceiveWaitDataLen;
                 send_frame[frame_index++] = data;
@@ -338,35 +339,53 @@
             
         case Usart0ReceiveWaitParamAddr:
             pack_param_addr = data;
-            usart0_receive_state = Usart0ReceiveWaitData;
+						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:
-            mUsart2ReceivePack[index++] = data;
-            send_frame[frame_index++] = data;
-            if(index == pack_data_len-6) {
-                usart0_receive_state = Usart0ReceiveWaitChecksum;
+							send_frame[frame_index++] = data;
+						mUsart2ReceivePack[index++] = data;
+            
+							if(index == pack_data_len-6) {
+                usart0_receive_state = Usart0ReceiveWaitChecksum1;
 								pack_datalen=pack_data_len-6;
-            }
+              }
             break;
             
-        case Usart0ReceiveWaitChecksum:
+        case Usart0ReceiveWaitChecksum1:
             pack_checksum = data << 8;  // 高字节
+						pack_checksum_test = data << 8;  // 高字节
+						send_frame[frame_index++] = data;
+					usart0_receive_state = Usart0ReceiveWaitChecksum2;
+						break;
+				case Usart0ReceiveWaitChecksum2:
             pack_checksum |= data;  // 低字节
-            
-            // 计算校验和 (从第3个字节开始,长度为5+数据长度)
-            calculated_checksum = Checksum_u16(&send_frame[2],pack_datalen+5);
-            
+            pack_checksum_test |= data;  // 低字节
+            // 计算校验和 (从第3个字节开始,长度为4+数据长度)
+						if(pack_msg_type!=CMD_READ)
+            {
+						calculated_checksum = Checksum_u16(&send_frame[2],pack_datalen+4);
+						}else{
+						calculated_checksum = Checksum_u16(&send_frame[2],4);
+						}
+            test_calculate=calculated_checksum;
             // 验证校验和
             if(pack_checksum == calculated_checksum) {
                 // 校验通过,处理数据
-									switch(pack_cmd_type)
-									{
+									switch(pack_msg_type)
+										{	
+										case CMD_REPLY:
 										case CMD_WRITE:
 											//从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中,赋值保存的参数并且存入flash
 										
-											memcpy((uint8_t*)&g_com_map + pack_param_addr, mUsart2ReceivePack, pack_datalen);
+											memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen);
 										
 											//返回一个error状态
 											//SendComMap(pack_datalen,pack_index);
@@ -375,13 +394,13 @@
 //											NVIC_SystemReset();
 											break;
 										case CMD_READ:
-													Send_Commap_mk_to_ble(pack_datalen,pack_param_addr);	
+													uart0_send_ComMap_to_BLE(pack_datalen,pack_param_addr);	
 											
 											break;
-										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;
 									}

--
Gitblit v1.9.3