自己改的串口协议 约定三个ff ff ff结尾,作为结束的标志

2019-07-21 06:34发布

void USART1_IRQHandler(void)          //中断服务函数             
{
         u8 res,x,a,times;
        if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET) //½óêüêy¾YòÔèy¸ö0xff½áÎ2êy¾Y
        {  
             res = USART_ReceiveData(USART1);
           if(res==0xff)//可能结束标志开始
           {
                         times++;
                         determined_buf[a++]=res;
                         if(times==3) recieveflag=1; //结束
                         else  //防止出现其他个数FF的情况
                         {
                           for(x=0;x<a;x++)
                                 {
                                 USART_RX_BUF[t++]=determined_buf[x++];
                                 }
                         }  
           }
                 
           else
          {
        USART_RX_BUF[t++]=res;       
       if(t>200) t=0;        //接收不超过200               
          }
        }
}

int main(void)  //主函数
{
u8 l,k;
extern u8 t;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LED_Init();
while(1)
{
   if(recieveflag==1) //接收完成标识是否置1
         {
                 printf(" 您输入的信息为 ");
          for(l=0;l<t;l++)
                {
                        USART_SendData(USART1,USART_RX_BUF[l]);
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);                                         
                }
                         printf(" ");
                        recieveflag =0;
         }
                  else
                 {
                   k++;
                         if(k%5000==0)
                         {
                           printf(" 正带源自 ");
                                 printf("ALIENTEK");
                         }
                         if(k%200==0)printf("请输入 ");
                         if(k%30==0) LED0=~LED0;
                         delay_ms(10);
                 }
}
}

不知道我的逻辑存在什么问题?大家帮忙看一下,新手一枚 ,望见谅!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。