title: “ QSerialPort-Qt串口通讯\t\t”
tags:

  • qt
  • serial
  • 串口
    url: 534.html
    id: 534
    categories:
  • Qt
    date: 2017-12-04 18:42:16

介绍

Qt对串口通讯提供了专用类QSerialPort,需要在pro文件增加:QT += serialport,其继承自QIODevice 相关类还有QSerialPortInfo 提供当前设备串口信息

QSerialPortInfo

QSerialPortInfo::availablePorts(); 可以获取当前设备的所有串口信息,提供了以下操作函数,可获得对应的信息类型。

QString description() const
bool hasProductIdentifier() const
bool hasVendorIdentifier() const
bool isBusy() const
bool isNull() const
QString manufacturer() const
QString portName() const
quint16 productIdentifier() const
QString serialNumber() const
void swap(QSerialPortInfo &other)
QString systemLocation() const
quint16 vendorIdentifier() const

portName一般为“COMX”;Description为描述信息;serialNumber为编号,此号一般不相同可用于串口设备识别。

QSerialPort

参考类帮助文档 相关串口配置函数:

bool sendBreak(int duration = 0)
bool setBaudRate(qint32 baudRate, Directions directions = AllDirections)
bool setBreakEnabled(bool set = true)
bool setDataBits(DataBits dataBits)
bool setDataTerminalReady(bool set)
bool setFlowControl(FlowControl flowControl)
bool setParity(Parity parity)
void setPort(const QSerialPortInfo &serialPortInfo)
void setPortName(const QString &name)
void setReadBufferSize(qint64 size)
bool setRequestToSend(bool set)
bool setStopBits(StopBits stopBits)

先配置完成后,调用open可开启串口 阻塞数据读写:

virtual bool open(OpenMode mode)
virtual bool waitForBytesWritten(int msecs = 30000)
virtual bool waitForReadyRead(int msecs = 30000)

同时可以利用QIODevice类的readyRead信号,connect以后可在收到信息后在槽中响应,利用

qint64 read(char *data, qint64 maxSize)
QByteArray read(qint64 maxSize)
QByteArray readAll()

读取内容。 串口可能在发送一串字符时每一个字符收到均有一次readyRead响应,此时需要自行判断终止符。