天天看点

基于linux平台使用QSerialPort注意事项

问题现象:

m_serialPort->write()//这句正常
connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(slot_receiveInfo()));//整死都没有进入槽里面
           

描述:

Qt5.1开始,开发串口应用使用的是QSerialPort和QSerialPortInfo。网上很多例程,但是基本都是windows平台,基于linux平台的串口较少,但区别又不大。这次遇到一个小坑,QSerialPort的应用在windows使用正常,但是移植到linux平台,就是接收不了数据。示波器发现我每写一次串口,串口也回了数据,说明QSerialPort的写是没问题的,但是就是readyRead信号触发不了,一次也不能!改用纯linuxC平台的串口方式就读写数据正常。在一个群里问了些大佬,竟然有说QSerialPort移植到linux正常跑过的,也有遇到我这个问题的。估计跟linux有关系。所以这句代码:

在windows是没问题的,理应在linux平台使用QSerialPort和QSerialPortInfo的话,读取部分得修改为不断去m_serialPort->readAll()。结果,也不行!!!通过示波器发现write正常,串口也返回了数据。额,等于轮训去read也不行。无奈抛弃QSerialPort方式,换成其他串口开发方式。

其他

1.Qt开发串口方式:①QSerialPort ②Posix_QextSerialPort ③linuxC的文件描述符方式

示例代码

关键代码:

/*
@ 该串口方法是三方插件Posix_QextSerialPort 方法
@ Bluetooth是自定义类
@ 串口读、写在同一个分离的线程里
*/
    //蓝牙串口线程
    BLE_COM = new Bluetooth(QString("/dev/ttySGK1"),QIODevice::ReadWrite,BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF);

    /*绑定读取串口槽*/
    connect(BLE_COM,SIGNAL(signal_readFromSerial(QByteArray)),this,SLOT(slot_test_readFromSerial(QByteArray)));

    //往蓝牙模块写指令
    emit BLE_COM->signal_writeToSerial("AT+GVERS\r\n");

           

Qt的使用方式:

#添加子模块

include ($$PWD/Bluetooth_com/Bluetooth_com.pri)

//包含头文件

#include “Bluetooth_com/serialportwidget.h”

资源下载

Bluetooth_com.tar.gz

继续阅读