OpenEdv-开源电子网

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

关于用QtSerialPort写串口上位机

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-4-1
在线时间
0 小时
发表于 2015-4-1 14:55:23 | 显示全部楼层 |阅读模式
5金钱
    最近尝试用Qt学C++,用QSerialPort这个类写串口的软件,但是运行调试后发现,QSerialPort->read()可以很顺利的收到32板子串口发来的data,但是用QserialPort->write()进行写串口时,虽然函数返回已经写入,但板子收不到信息。 用丁丁串口助手和32串口通信正常。 昨天又刚发现,write函数执行后,再用丁丁助手打开串口点击发送,就可以把write没有发出去的data发出去,所以猜测QserialPort->只是将数据写入到缓冲区,并没有“发送"出去。 之后本人用虚拟串口在PC上搞出来俩虚拟串口连接起来后,用丁丁助手和本人的程序可以正常全双工通信。 目前还没找出问题所在,大家看看问题所在是什么???

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-2 00:03:18 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-10-3
在线时间
1 小时
发表于 2016-4-2 20:26:27 | 显示全部楼层
我最近也在用QT的QSerialPort类写上位机,发现无法进行通信,发现这个判断进不去  if(USART_RX_STA&0x4000)//接收到了0x0d
                                {
                                if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                                else USART_RX_STA|=0x8000;        //接收错误重新开始
                                }                                     不知道楼主解决这个问题没有,希望楼主给我点建议
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-9-14
在线时间
1 小时
发表于 2016-9-14 01:56:22 | 显示全部楼层
谢谢,学习一下
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
发表于 2018-7-26 10:50:27 | 显示全部楼层
楼主,请问你的问题解决了没?本人遇到同样的问题
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-7-26 13:17:41 | 显示全部楼层
你下个虚拟串口把上位机和你的串口助手连一起,看看你的上位机能不能发数据
不能就是上位机的问题,能就是通信协议?
QT好久没用了,你去那个类里找找,我记得有个函数直接可以发送的
猪猪熊呢?
回复

使用道具 举报

8

主题

206

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-4-6
在线时间
234 小时
发表于 2018-7-26 13:20:34 | 显示全部楼层
楼上正解,写调试类工具都是这个干的。
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-7-26 14:47:54 | 显示全部楼层
本帖最后由 sammy902583 于 2018-7-26 15:52 编辑

通常我在Windows都直接用Windows API, 比較直接.

刚刚试一下, 如果直接read/write, 好像真的会卡住.
研究一下Qt的源碼, 发现它是非同步IO, 所以实际在call完不会立刻收送.
所以
在write()之后, 呼叫waitForByteWritten(1000),
在read()之前, 呼叫waitForReadyRead(1000),

看起来一切就可以正常了.
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
发表于 2018-8-13 09:48:20 | 显示全部楼层
本人遇到同样的问题,然后使用虚拟串口查看过能够相互发送数据,最终解决该问题了。只因qt串口助手没有把数据发送出去,上位机把数据发送到下位机(windows换行符"\r\n")需要换行符。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 08:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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