门户
书籍
教程
论坛
问答
下载
签到
个人空间
帐号
自动登录
找回密码
密码
登录
立即注册
账号
自动登录
找回密码
密码
登录
立即注册
请绘制轨迹完成人机验证
由vaptcha提供技术支持
登录
注册
搜索
搜索
搜索
热搜
qml
quick
串口
输入中文
数据库
arm
百度地图
qt聊天
QT安装
安装
多窗口
中文乱码
聊天
局域网
鼠标
QT
图片
乱码
rs485通讯
多线程
android
多文档编辑器
本版
用户
本版
用户
【HUX】问题互助平台
博客
动态
好友
帖子
收藏
道具
勋章
任务
淘帖
动态
日志
相册
分享
记录
留言板
群组
门户
导读
排行榜
设置
我的收藏
退出
Qt开源社区
›
精华区(请在“有问必答”发帖)
›
有问必答
›
串口传输
›
串口接收数据不完整
发布主题
返回列表
串口接收数据不完整
1
回复
7949
查看
[复制链接]
jasona17
当前离线
积分
5
jasona17
累计签到:1 天
连续签到:1 天
来源:
2017-5-3 22:12:00
显示全部楼层
|
阅读模式
2
Qter豆
void
CObject1
::serialReceived(){
QByteArray
serialdata;
serialdata
=
serial
->readAll();
char
*data
=
serialdata.data();
int
length
=
serialdata.size();
int
i;
if
(data[
0
]
==
'\x88'
)
{
switch
(data[
1
])
{
case
(
'\xA1'
):
{
numData
=
(
unsigned
char
)data[
2
]
/
4
;
break
;
}
case
(
'\xA2'
):
{
numData
=
(
unsigned
char
)data[
2
]
/
4
;
break
;
}
default
:
{
return
;
}
}
}
else
if
(!
finished
)
{
}
else
{
return
;
}传输的是一个16位的数据包,帧头0x88,指令位0xA1
,数据长度位0x0C,之前用有线传输可以工作。
换成无线传输之后可能由于不能一次读取完整的数据包,只有偶尔能显示一个数。想把串口接收写成有限状态机的形式不知能否解决。求大神支招。
我来回答
回复
使用道具
举报
godmaycry
当前离线
积分
140
godmaycry
累计签到:104 天
连续签到:1 天
2017-5-4 15:31:47
显示全部楼层
不是数据不完整,是数据分包了,在数据接收的地方加断点,你会发现数据分几次传来。
原因就是信号响应的是有数据可接收,并不是数据都到了缓冲区,等你接收。
解决方法可以是写个定时器,收到数据后延迟100ms接收。
回复
使用道具
举报
返回列表
发表新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满)
我知道了