OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2082|回复: 5

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

[复制链接]

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
发表于 2018-12-19 10:45:48 | 显示全部楼层 |阅读模式
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("\r\您输入的信息为\r\n\r\n");
          for(l=0;l<t;l++)
                {
                        USART_SendData(USART1,USART_RX_BUF[l]);
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);                                         
                }
                         printf("\r\n\r\n");
                        recieveflag =0;
         }
                  else
                 {
                   k++;
                         if(k%5000==0)
                         {
                           printf("\r\n正带源自\r\n");
                                 printf("ALIENTEK");
                         }
                         if(k%200==0)printf("请输入\n");
                         if(k%30==0) LED0=~LED0;
                         delay_ms(10);
                 }
}
}

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

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2018-12-19 11:38:57 | 显示全部楼层
一般很少用3个一模一样的字符来当起始或者结束符号 因为这样容易出错  一般都会采用不一样的字符。  而且如果判断结束符号 容易挂死  应该加上接收超时
回复 支持 反对

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2018-12-19 12:33:04 | 显示全部楼层
兄弟,最基本的东西搞清楚再说,变量都没初始化,而且局部的,
回复 支持 反对

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
 楼主| 发表于 2018-12-21 09:26:36 | 显示全部楼层
simms01 发表于 2018-12-19 11:38
一般很少用3个一模一样的字符来当起始或者结束符号 因为这样容易出错  一般都会采用不一样的字符。  而且如 ...

多谢 多谢多谢
回复 支持 反对

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
 楼主| 发表于 2018-12-21 09:27:12 | 显示全部楼层
d1z1y2 发表于 2018-12-19 12:33
兄弟,最基本的东西搞清楚再说,变量都没初始化,而且局部的,

好的 多谢 ,多谢
回复 支持 反对

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2018-12-5
在线时间
41 小时
 楼主| 发表于 2018-12-21 09:27:24 | 显示全部楼层
d1z1y2 发表于 2018-12-19 12:33
兄弟,最基本的东西搞清楚再说,变量都没初始化,而且局部的,

好的 多谢 多谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 17:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表