ZhenDangBo2024/武汉中显资料合集/应用笔记/单片机读取VGUS屏返回指令解析例程.c
2024-11-18 10:44:27 +08:00

95 lines
2.1 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//功能单片机读取VGUS屏返回指令
//来源:武汉中显科技有限公司 www.viewtech.cn
//全局变量
u16 StartNum=0,TalNum=0;
#define BUFFER_SIZE 2048//指令缓冲区大小,用户可根据自己单片机的容量修改
u8 CommBuff[BUFFER_SIZE]//定义指令缓冲区
#define USER_R3 0xA5//帧头
#define USER_RA 0x5A//帧头
/////////////////
//串口中断函数
//用户根据单片机的不同,修改串口中断函数,中断函数内只保存串口数据到缓冲区
void USART3_IRQHandler(void)
{
CommBuff[TalNum++]=USART_ReceiveData(USART3);//保存串口数据
if(TalNum==BUFFER_SIZE)
TalNum=0;
}
//主程序指令解析函数
//用户在主循环中调用
void deal_command()
{
u16 i,CurNum,tem_TalNum;
u8 CmdBuf[256];
u16 nowbuffer,len;
len=StartNum;
tem_TalNum=TalNum;
if(tem_TalNum==len)//
return;
if(CommBuff[StartNum]!=USER_R3)
{
StartNum++;
if(StartNum==BUFFER_SIZE)
StartNum=0;
return;
}
if(tem_TalNum>len)
nowbuffer=tem_TalNum-len;
else
nowbuffer=tem_TalNum+BUFFER_SIZE-len;
if(nowbuffer<5)
return;
CurNum=StartNum+2;
if(CurNum>BUFFER_SIZE-1)
CurNum-=BUFFER_SIZE;
len=CommBuff[CurNum]+3;
if(nowbuffer<len)
return;
i=0;
CurNum=StartNum;
while(1)
{
CmdBuf[i++]=CommBuff[CurNum++];
if(CurNum==BUFFER_SIZE)
CurNum=0;
if(i==4)
{
if(CmdBuf[0]!=USER_R3||CmdBuf[1]!=USER_RA)//
{
StartNum=CurNum;
return;
}
len=CmdBuf[2];
}
else if(i>4)
{
if(i==len+3)//
{
StartNum=CurNum;
break;
}
else if(i>255)//
{
StartNum=CurNum;
return;
}
else if(CurNum==tem_TalNum)
return;
}
}
///现在解析指令CmdBuf保存一整条指令
switch(CmdBuf[3])
{
case 0x81:
break;
case 0x83:
break;
default:////命令无效,删除
break;
}
return;
}