串口通信

[复制链接]
2477|13
 楼主| cshij2009 发表于 2012-5-28 10:59 | 显示全部楼层 |阅读模式
单片机顺次发送0x10 0x20 0x30 0x40四个字符,另一个单片机接收这四个字符,接收到的有时候不是发送的顺序,如接收到的是0x20 0x30 0x40 0x10  ;0x10 0x20 0x40 0x10
ayb_ice 发表于 2012-5-28 11:07 | 显示全部楼层
波特率不对吧
21ID 发表于 2012-5-28 11:09 | 显示全部楼层
1,波特率可能不对
2,串口接收函数写得不好
个人认为第一种可能行较大!
 楼主| cshij2009 发表于 2012-5-28 13:13 | 显示全部楼层
我用单片机给串口助手发送,串口助手能够正确显示发送的数据,波特率应该没问题的呀。现在就是接收有问题
ayb_ice 发表于 2012-5-28 13:29 | 显示全部楼层
那就是程序有问题了
 楼主| cshij2009 发表于 2012-6-6 16:28 | 显示全部楼层
5# ayb_ice 我做的测试是:按键之后,开接收中断,允许接收数据,我用串口助手发送三个字节数据,如0x01 0x02 0x03,我在接收中断程序中,接收一个字节数据,即0x01,关闭接收中断,等待下一次按键;当我再次按键,开接收中断,没有用串口助手给单片机发送数据,可是单片机接收到的数据是0x03!!!
ups888 发表于 2012-6-6 16:31 | 显示全部楼层
串口助手发送是不间断连续发送么?
 楼主| cshij2009 发表于 2012-6-6 16:36 | 显示全部楼层
7# ups888 用串口助手手动给单片机发送
程序匠人 发表于 2012-6-6 17:02 | 显示全部楼层
0x20 0x30 0x40 0x10  ;这个有点像是没有正确识别帧头帧尾

0x10 0x20 0x40 0x10 ;这个好像是数据(0X30)丢失
 楼主| cshij2009 发表于 2012-6-6 20:14 | 显示全部楼层
9# 程序匠人 那我应该怎么办呢?
ZG11211 发表于 2012-6-6 20:43 | 显示全部楼层
我的经验是,连续发送时,要加入延时,否则接收方数据处理不及时,爱出错,我喜欢加入200us到10ms的延时。
ningling_21 发表于 2012-6-6 22:44 | 显示全部楼层
9# 程序匠人  那我应该怎么办呢?
cshij2009 发表于 2012-6-6 20:14

用中断接收,并保存在缓冲区中...
JC.Wang 发表于 2012-6-7 12:13 | 显示全部楼层
个人觉得,是接收程序不对,应该用示波器看一下波形,就能知道是否有错位现象
程序匠人 发表于 2012-6-7 12:29 | 显示全部楼层
9# 程序匠人  那我应该怎么办呢?
cshij2009 发表于 2012-6-6 20:14


针对第一个问题,需要完善你的通讯协议。即如何识别一帧的开始和结束。
方法:
1、通过超时进行判断。当一帧数据未收满,且延时超过一定时间未收到新数据,则丢弃前面收的的内容。重新准备接收。
2、添加特定的字符,作为帧头或帧尾的识别码。当收到帧头时,作为一帧的开始,当收到帧尾时作为一帧的结束。(帧头和帧尾,可以只设定一个,也可以两个都有)

针对第二个问题,需要检查你的程序的实时性。看究竟是什么原因导致数据丢失。可能是因为任务堵塞,没有即时处理接收内容导致。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

73

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部