OpenEdv-开源电子网

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

USART串口通信接收协议

[复制链接]

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2016-7-19
在线时间
31 小时
发表于 2017-7-11 14:03:53 | 显示全部楼层 |阅读模式
1金钱
各位大侠们,原子哥设计的串口接收协议:接收到的数据必须是0x0D 0x0A结尾,那如果串口发送的数据中有0x0D数据,如: 0x12 0x0D 0x34 0x0D 0x0A,这样会不会导致第一个0x12数据接收不到呢?原子个源码如下:
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是 0x0d 0x0a 结尾)
        {
        Res =USART_ReceiveData(USART1);//(USART1->DR);   //读取接收到的数据
        
        if((USART_RX_STA&0x8000)==0)//接收未完成
            {
            if(USART_RX_STA&0x4000)//接收到了 0x0d
                {
                    if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                    else USART_RX_STA|=0x8000;    //接收完成了
                }
            else //还没收到 0X0D
                {   
                    if(Res==0x0d)USART_RX_STA|=0x4000;
                    else
                    {
                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                        USART_RX_STA++;
                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收      
                    }         
                }
            }            
     }

最佳答案

查看完整内容[请看2#楼]

我们协议仅限于接收字符串,接收16进制数据,你要改协议。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2017-7-11 14:03:54 | 显示全部楼层
我们协议仅限于接收字符串,接收16进制数据,你要改协议。
回复

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2016-9-23
在线时间
20 小时
发表于 2017-7-11 14:11:59 | 显示全部楼层
协议可以更改的,以回车换行结束可以,也可以是其他的,传输的数据最好不含有协议的字符,或
回复

使用道具 举报

10

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-12
在线时间
35 小时
发表于 2017-7-11 18:11:02 | 显示全部楼层
同意3楼,我觉得会出现你说的这样的问题,我自己写的串口程序就没有这么写,反正我觉得原子这段代码不严谨,毕竟只是学习用的。
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1665
金钱
1665
注册时间
2016-4-29
在线时间
266 小时
发表于 2017-7-11 20:04:05 | 显示全部楼层
传送的数据中不要出现 帧头就可以了,如果不能确保的话,就要采用判断字节间隔时间的方法来做
回复

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2017-7-12 08:59:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2016-7-19
在线时间
31 小时
 楼主| 发表于 2017-7-12 09:11:11 | 显示全部楼层
正点原子 发表于 2017-7-11 14:03
我们协议仅限于接收字符串,接收16进制数据,你要改协议。

好的,谢谢原子哥,那接收16进制数据是不是最好用超时法作检测
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-18 16:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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