guanjiao
2018-09-12 20a2aa293307cf9216d3deddb0e2e003e07068f9
新增串口AT指令解析c文件
已添加2个文件
87 ■■■■■ 文件已修改
源码/核心板/Src/application/serial_at_cmd_app.c 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
源码/核心板/Src/application/serial_at_cmd_app.h 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Ô´Âë/ºËÐİå/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;
    }
}
Ô´Âë/ºËÐİå/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