Qt 串口操作

引用串口

  • 在.pro文件中添加QT += serialport语句。
  • 添加头文件
#include <QSerialPort>
#include <QSerialPortInfo>

创建串口对象

QSerialPort serial;

初始化串口

//设置串口名
serial.setPortName("COM7");
//设置波特率
serial.setBaudRate(QSerialPort::Baud1152000);
//设置数据位数
serial.setDataBits(QSerialPort::Data8);
//设置奇偶校验
serial.setParity(QSerialPort::NoParity);
//设置停止位
serial.setStopBits(QSerialPort::OneStop);
//设置流控制
serial.setFlowControl(QSerialPort::NoFlowControl);
//打开串口
serial.open(QIODevice::ReadWrite);
//清空缓存
serial.flush();

读写串口

//读串口
QByteArray buffer;
buffer = serial.readAll();
//写串口
serial.write(buffer);

关闭串口

serial.close();

读取随机数据

由串口设备主动发出数据,通讯时间是不明确时,可以使用信号槽绑定串口读就绪信号,当有数据就绪时自动调用槽函数读取和处理。

  1. 创建串口对象后,为串口的读就绪信号添加一个槽函数。
//连接信号和槽
QObject::connect(&serial, &QSerialPort::readyRead, this, &MainWindow::serialPortReadyRead);

  1. 编写槽函数用于读取数据
void MainWindow::serialPortReadyRead()
{
    //读取数据
    QByteArray buffer = serial.readAll();

    //处理数据
    //……

}

读取响应数据

这类通讯逻辑通常是主机发送指令给设备,设备接收指令并完成动作后返回数据。这种情况可以通过等待超时的方式进行数据接收,等待指令回复的时间根据具体情况设定,当第一次读取到数据后可再等待短暂的时间来确定消息是否被接收完毕。

QByteArray MainWindow::serialPortRead(int ms)
{
    QByteArray buffer;

    if(serial.waitForReadyRead(ms))
    {
        for (;;)
        {
            buffer += serial.readAll();
            if(!serial.waitForReadyRead(20))
            {
                return buffer;
            }
        }
    }

    return NULL;
}

获取可用串口

通过尝试以读写方式打开列表中的串口,如果能打开成功说明这个串口可用。

QStringList MainWindow::GetEnableCommPort()
{
    QStringList CommPortList;

    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        if (serial.open(QIODevice::ReadWrite))
        {
            CommPortList.append(serial.portName());
            serial.close();
        }
    }

    return CommPortList;
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值