当前位置:编程学习 > wap >>

Qt 串口通信

我用的是Qt第三方类, 串口初始化代码如下
    //串口初始化
    m_pCom = new Win_QextSerialPort();
    m_pCom->setQueryMode(QextSerialBase::Polling);       //查询驱动
    m_pCom->setPortName("com1");   //设置端口号“ttyS0”
    m_pCom->setBaudRate(BAUD38400);     //设定波特率
    m_pCom->setFlowControl(FLOW_OFF);       //设定流控制
    m_pCom->setParity(PAR_NONE);        //无校验位
    m_pCom->setDataBits(DATA_8);        //设定数据位
    m_pCom->setStopBits(STOP_1);        //设定停止位
    m_pCom->setTimeout(25);     //数据发送超时值
两个程序一个发一个收,通过串口电脑自己连自己。当直接开启两个程序时,传送数据非常慢,30K的数据需要大约5分钟左右。而且数据有问题,就是ASCII大于127的,接受端收到的都小于127了,也就是数据有错误。之后开启了超级终端,两个超级终端互发一个中国字,全部正常。然后不断开直接关闭超级终端。此时再次开启那两个串口程序,发送数据很快30K数据几秒钟内发完,而且数据无错误,这是为什么啊?我该怎样修改?跪谢! --------------------编程问答-------------------- 当从串口的设置来看,是没有问题的

可能是程序的其他地方影响了速度。

--------------------编程问答-------------------- 可是不仅仅是速度问题,慢归慢,但是是ASCII 的字符传输有问题啊,不开超级终端,就不好使,发送字符出问题,开过超级终端之后就不出问题了。。。这是为啥啊? --------------------编程问答-------------------- qt下的串口通信使用第三方的串口类实属下下策,为什么慢呢?就是因为它通用。

我通常都是在QT里使用c开发串口通信 open 串口得到fd,直接读写操作很高效(linux)。总归就是说,用qt调用你系统的system call 读写串口,别使第三方串口类。 --------------------编程问答-------------------- 握手信号设置的对么?
找个串口的抓包工具,看下,本身串口发回的数据慢,还是处理的慢? --------------------编程问答-------------------- 使用SYSZUXcom和你的程序进行测试 --------------------编程问答--------------------
引用 3 楼 yiyaaixuexi 的回复:
qt下的串口通信使用第三方的串口类实属下下策,为什么慢呢?就是因为它通用。

我通常都是在QT里使用c开发串口通信 open 串口得到fd,直接读写操作很高效(linux)。总归就是说,用qt调用你系统的system call 读写串口,别使第三方串口类。


那么windows 尼? 请指教。 --------------------编程问答-------------------- 这跟串口类没有关系,我也用过这个串口类,在windows下和centos下都跑过,肯定没问题,至于127的问题应该是sign 跟unsigned的关系。

另外要看你在这个类下用的是哪种驱动方式。

你在此处使用的是Polling,是轮询方式,跟超时时间设置也有关系。在win下可以使用事件驱动方法收取数据。 --------------------编程问答-------------------- qtcn.org不是有个Qt操作串口的源码吗?
自己改一下不就行了?
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,