From 20a2aa293307cf9216d3deddb0e2e003e07068f9 Mon Sep 17 00:00:00 2001
From: guanjiao <sqrgj@163.com>
Date: 星期三, 12 九月 2018 09:25:32 +0800
Subject: [PATCH] 新增串口AT指令解析c文件

---
 源码/核心板/Src/application/serial_at_cmd_app.c |   71 +++++++++++++++++++++++++++++++++++
 源码/核心板/Src/application/serial_at_cmd_app.h |   16 ++++++++
 2 files changed, 87 insertions(+), 0 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/serial_at_cmd_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/serial_at_cmd_app.c"
new file mode 100644
index 0000000..c8864cb
--- /dev/null
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/serial_at_cmd_app.c"
@@ -0,0 +1,71 @@
+#include "serial_at_cmd_app.h"
+#include <string.h>
+
+uint8_t g_frame_data[MAX_FRAME_LEN] = {0};
+uint8_t g_frame_data_len = 0;
+
+uint32_t g_alarm_dist = 200;
+uint8_t g_alarm_dev = 0;
+
+void ParseFrame(void)
+{
+	if(!memcmp(g_frame_data, "SET", 3))
+	{
+		g_alarm_dist = (g_frame_data[3]-'0')*1000 + (g_frame_data[4]-'0')*100 +  (g_frame_data[5]-'0')*10 + (g_frame_data[6]-'0');
+	}
+	else if(!memcmp(g_frame_data, "DEV", 3))
+	{
+		g_alarm_dev = g_frame_data[3]-'0';
+	}
+}
+
+void UsartParseDataHandler(uint8_t data)
+{
+	static uint8_t s_usart_state = 0;
+	static uint8_t s_data_pos;
+	
+	switch(s_usart_state)
+	{
+		case 0:
+			if(data=='A')	s_usart_state=  1;
+		break;
+			
+		case 1:
+			if(data=='T')	s_usart_state = 2;
+		break;
+		
+		case 2:
+			if(data=='+')
+			{ 
+				s_usart_state = 3;
+				s_data_pos = 0;
+				g_frame_data_len = 0;
+			}
+		break;
+			
+		case 3:
+			g_frame_data_len = s_data_pos;
+			g_frame_data[s_data_pos++] = data;
+			if(data == 0x0d)
+			{
+				s_usart_state = 4;
+			}
+			if(s_data_pos >= MAX_FRAME_LEN) //如果超过最大长度
+			{
+				g_frame_data_len = MAX_FRAME_LEN;
+				ParseFrame();
+				s_usart_state = 0;
+			}
+		break;
+			
+		case 4:
+			if(data == 0x0a)
+			{
+				ParseFrame();
+				s_usart_state = 0;
+			}
+		break;
+			
+		default: break;
+	}
+}
diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/serial_at_cmd_app.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/serial_at_cmd_app.h"
new file mode 100644
index 0000000..b9b061f
--- /dev/null
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/serial_at_cmd_app.h"
@@ -0,0 +1,16 @@
+
+#ifndef __AT_CMD_H__
+#define __AT_CMD_H__
+
+#include "stm32f10x.h"
+
+#define MAX_FRAME_LEN		50
+
+extern uint32_t g_alarm_dist;
+extern uint8_t g_alarm_dev;
+
+void UsartParseDataHandler(uint8_t data);
+
+
+#endif
+

--
Gitblit v1.9.3