5235|14

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51单片机串口通信的问题 [复制链接]

上下位机没有串口协议,只是一方准备好接收,另一方就可以发送了,现在问题是接收方怎么能知道数据流已经结束呢,在这里没有结束标志符,高手们 帮我想想办法 怎么去检测?谢谢

最新回复

类似于“看门狗”,一定的问题都是针对“接收缓冲区”的。 而接收缓冲区一般是循环队列。可以从队尾看一帧数据有无变化来确定是否发送完。 接收中断在有数据来时响应。所以,也可以看有多长时间没有“接收中断”来确定。 定时为一个相对长的时间间隔,或者凭经验,看通常两帧之间的时间间隔为多少。 系统的数据发送方面的情况,可能是变化的,所以要有一定的冗余。   详情 回复 发表于 2007-9-13 07:44
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
协议就是约定,能说话,怎么让别人理解这个意思,这就是约定

什么时候说完,协议是必须的,自己定一个简单的吧


比如说弄个超时什么的...
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
但是发送端的设备是已经做好的,不能定协议了,所以我这里只能置接收状态后接收字符串,我想能不能做超时处理,如果在一个周期内没有到达下一个字符没有到达,则认为传输结束了,这样可以不?还有我可以在单片机里设了缓存,使用定时器轮询,如果缓存里有值,则读出处理,如果没有则认为传输结束,这个是方法2,可以吗?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
不定长数据的串口接收 还有没有更好的办法?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
自己的定一个双发的通讯协议,比如 协议头 + 传输数据长度 + 数据
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
因为现在不能给修改发送协议,我认为你的方法是可取的,虽然不严谨,但估计也只能这样了。但查询的时候我认为不能看缓存里是否有值,而是看在一定时间里它的值是否更新了.因为缓存接收完数据以后不会自动清零.
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
你接收端是用单片机做的吗?如果是也可以用查询TI方式,每次取一帧数据后清TI.收到数据TI会自动置1.如果在一定时间内没有TI置1,则可认为数据流结束,这好象比查询缓存要好操作点.
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
笔误,上面TI应该是RI.呵呵.
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
命令+长度+数据+校验 注一个包~
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

10
 
我的方法:
   增加一个定时器任务,"关注"串口接受的结束,类似喂狗
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
LZ说的可行但不可取,应该换个别的办法比较好。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
偶也采用:协议头 + 传输数据长度 + 数据
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

13
 
先发送要发送的数据包长度,然后在发送数据,就好了
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
加定时器,每次有新数据接收,就打开定时器,定时器内部不断让一个变量自加,每次收到新字符就让那个变量=0,这样当一段时间没有收到新字符后,那个变量就会自加到上限值,此时,处理数据,关闭定时器自己。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

15
 
类似于“看门狗”,一定的问题都是针对“接收缓冲区”的。

而接收缓冲区一般是循环队列。可以从队尾看一帧数据有无变化来确定是否发送完。

接收中断在有数据来时响应。所以,也可以看有多长时间没有“接收中断”来确定。

定时为一个相对长的时间间隔,或者凭经验,看通常两帧之间的时间间隔为多少。

系统的数据发送方面的情况,可能是变化的,所以要有一定的冗余。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表