根据DLT645协议,写串口接收和发送一帧数据怎么写

void USART3_receive(void)
{
u8 i=0;
u8 cnt_t2;
cnt_t2 = RxCounter3;

while((RxBuffer3[i]!=0x68)&&(cnt_t2!=0))
{
    cnt_t2--;
    i++;
}

if(cnt_t2>=12)
{
if(RxBuffer3[i+7] != 0x68)
{
memset(RxBuffer3,0,MAX_BUFFER);
RxCounter3 = 0;
}
else if((RxBuffer3[i+9]+12) <= cnt_t2)
{
if(RxBuffer3[cnt_t2+i-1]==0x16)
{
RxBuffer3[RxCounter3++]=USART_ReceiveData(USART3);
}
else
{ memset(RxBuffer3,0,MAX_BUFFER);
RxCounter3 = 0;
}
}
}

}