chen
2025-03-13 cb9f8345145f29d7d2437953b5647955c4530080
keil/include/drivers/serial_at_cmd_app.c
@@ -20,6 +20,7 @@
uint8_t mUsartReceivePack[100] = {0};
uint8_t mUsart2ReceivePack[150] = {0};
uint8_t mUsart0ReceivePack[150] = {0};
double jd,wd;
int analysis_num,pos_state;
uint8_t state5V_prase_flag=1,gps_prase_flag=1;
@@ -38,6 +39,7 @@
    //BLE_RECV_STATE_LF,
} E_BLERecvState;
static char gps_header[20];
static char ble_header[20];
typedef struct
{
    char m_pData[100];
@@ -55,6 +57,7 @@
uint8_t  mUsart2ReceivePack_before , mUsart2ReceivePack_now;
uint8_t  mUsart0ReceivePack_before , mUsart0ReceivePack_now;
uint8_t j_ct=0,CT_satrt_temp=0,CT_satrt=0,numb_base=0   ;
uint8_t id_cmpare[12]= {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x30, 0x30, 0x30, 0x31}; //123456780001//测试//RC2202A:
@@ -135,7 +138,7 @@
    }
}
double d_value;
double d_value,d_value1;
void UsartParseDataHandler(uint8_t data)
{
    if(state5V_prase_flag&&!g_com_map[MODBUS_MODE])
@@ -245,21 +248,21 @@
           
            analysis_num=sscanf((char*)mUsart2ReceivePack,"$%[^,],%*[^,],%[^,],%*[^,],%[^,],%*[^,],%[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*s",gps_header,wdrecv.m_pData,jdrecv.m_pData,Posstate.m_pData);
            if(!memcmp(gps_header,"GNGGA",5))
            {
               d_value = strtod(wdrecv.m_pData,NULL);
                if(d_value>1)
                {
                     blink_led(&gps_success_state);
            { d_value=strtod(wdrecv.m_pData,NULL);
                     d_value1=strtod(jdrecv.m_pData,NULL);
                     if(d_value>0&&d_value1>0)
                     {
                    blink_led(&gps_success_state);
                    wd=strtod(wdrecv.m_pData,NULL);
                    jd=strtod(jdrecv.m_pData,NULL);
                    pos_state=atoi(Posstate.m_pData);
                }
                     }
                        if(pos_state!=0)
                        {
                gps_timeout_flag=0;//不超时接收状态
                gps_need_data_flag=0;//接收数据完成
                gps_wait_count=0;//清0接收状态
                        gps_power_state=0;//立即关闭gps避免紧接着进入搜索导致未及时关闭
                        gps_power_state=0;//立即关闭gps避免紧接着进入搜索导致未及时关闭//注释为了防止GPS获得数据过快导致DMA缓存区数据重新涌入
                        update_led_power_state();
                        pos_state=0;
                        }
@@ -276,3 +279,38 @@
    }
}
void Usart0ParseDataHandler(uint8_t data)
{
            static uint16_t warning_distance,temp_id,temp_bind_id;
        static uint8_t index = 0;
        //接收数据开始分析
        mUsart0ReceivePack[index]  =  data; //char数组传进来参数data
        mUsart0ReceivePack_before  =  mUsart0ReceivePack_now;
        mUsart0ReceivePack_now=data;
        index++;
        if( mUsart0ReceivePack_before == 0x0D && mUsart0ReceivePack_now==0x0A )//接收数据到“0x0D 0x0A”结束
        {
               LOG_INFO(TRACE_MODULE_APP,"收的到蓝牙报文%s\r\n",mUsart0ReceivePack);
            //解析该条GPS报文
            analysis_num=sscanf((char*)mUsart0ReceivePack,"$%[^,],%[^,],%[^,],%[^,]\r\n",ble_header,temp_id,temp_bind_id,warning_distance);
                  if(!memcmp(ble_header,"BLE",3)&&temp_id==g_com_map[DEV_ID])
            {
                     LOG_INFO(TRACE_MODULE_APP,"成功解析,数据为%x,%x,%d,%d\r\n",temp_id,temp_bind_id,warning_distance,analysis_num);
                     g_com_map[BIND_DEV_ID]=temp_bind_id;
                     g_com_map[ALARM_DISTANCE1]=warning_distance;
                     //save_com_map_to_flash();
            }
            memset(mUsart0ReceivePack,0,sizeof(mUsart0ReceivePack));
//            memset(wdrecv.m_pData,0,sizeof(wdrecv.m_pData));
//            memset(jdrecv.m_pData,0,sizeof(jdrecv.m_pData));
//            memset(Posstate.m_pData,0,sizeof(Posstate.m_pData));
            index=0;
            mUsart0ReceivePack_before=0;
            mUsart0ReceivePack_now=0;
        }
}