打印

串口通信

[复制链接]
1490|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 | 只看该作者
我用单片机给串口助手发送,串口助手能够正确显示发送的数据,波特率应该没问题的呀。现在就是接收有问题

使用特权

评论回复
5
ayb_ice| | 2012-5-28 13:29 | 只看该作者
那就是程序有问题了

使用特权

评论回复
6
cshij2009|  楼主 | 2012-6-6 16:28 | 只看该作者
5# ayb_ice 我做的测试是:按键之后,开接收中断,允许接收数据,我用串口助手发送三个字节数据,如0x01 0x02 0x03,我在接收中断程序中,接收一个字节数据,即0x01,关闭接收中断,等待下一次按键;当我再次按键,开接收中断,没有用串口助手给单片机发送数据,可是单片机接收到的数据是0x03!!!

使用特权

评论回复
7
ups888| | 2012-6-6 16:31 | 只看该作者
串口助手发送是不间断连续发送么?

使用特权

评论回复
8
cshij2009|  楼主 | 2012-6-6 16:36 | 只看该作者
7# ups888 用串口助手手动给单片机发送

使用特权

评论回复
9
程序匠人| | 2012-6-6 17:02 | 只看该作者
0x20 0x30 0x40 0x10  ;这个有点像是没有正确识别帧头帧尾

0x10 0x20 0x40 0x10 ;这个好像是数据(0X30)丢失

使用特权

评论回复
10
cshij2009|  楼主 | 2012-6-6 20:14 | 只看该作者
9# 程序匠人 那我应该怎么办呢?

使用特权

评论回复
11
ZG11211| | 2012-6-6 20:43 | 只看该作者
我的经验是,连续发送时,要加入延时,否则接收方数据处理不及时,爱出错,我喜欢加入200us到10ms的延时。

使用特权

评论回复
12
ningling_21| | 2012-6-6 22:44 | 只看该作者
9# 程序匠人  那我应该怎么办呢?
cshij2009 发表于 2012-6-6 20:14

用中断接收,并保存在缓冲区中...

使用特权

评论回复
13
JC.Wang| | 2012-6-7 12:13 | 只看该作者
个人觉得,是接收程序不对,应该用示波器看一下波形,就能知道是否有错位现象

使用特权

评论回复
14
程序匠人| | 2012-6-7 12:29 | 只看该作者
9# 程序匠人  那我应该怎么办呢?
cshij2009 发表于 2012-6-6 20:14


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

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

73

帖子

0

粉丝