自己改的串口协议 约定三个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);
                 }
}
}

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
simms01
1楼-- · 2019-07-21 10:28
一般很少用3个一模一样的字符来当起始或者结束符号 因为这样容易出错  一般都会采用不一样的字符。  而且如果判断结束符号 容易挂死  应该加上接收超时
d1z1y2
2楼-- · 2019-07-21 12:37
 精彩回答 2  元偷偷看……
对方无法输入
3楼-- · 2019-07-21 15:25
simms01 发表于 2018-12-19 11:38
一般很少用3个一模一样的字符来当起始或者结束符号 因为这样容易出错  一般都会采用不一样的字符。  而且如 ...

多谢 多谢多谢
对方无法输入
4楼-- · 2019-07-21 16:45
d1z1y2 发表于 2018-12-19 12:33
兄弟,最基本的东西搞清楚再说,变量都没初始化,而且局部的,

好的 多谢 ,多谢
对方无法输入
5楼-- · 2019-07-21 17:18
d1z1y2 发表于 2018-12-19 12:33
兄弟,最基本的东西搞清楚再说,变量都没初始化,而且局部的,

好的 多谢 多谢

一周热门 更多>