欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Linux下QT5以上版本串口的最简单实现(测试可用)

程序员文章站 2022-03-27 21:54:05
Linux下QT5以上版本串口的最简单实现(测试可用)1. 简介简简单单一个串口,在Linux环境下踩了无数的雷。这里用最简单的方式实现串口通讯。2. 查看串口名称打开终端,输入命令行,看看现在设备上有的串口。看看你想用哪一个。//查看串口名称ls -l /dev/ttyS*//终端输出crw-rw---- 1 root dialout 4, 67 7月 28 08:51 /dev/ttyS1crw-rw---- 1 root dialout 4, 67 7月 28 08:51 /d...

Linux下QT5以上版本串口的最简单实现(测试可用)

1. 简介

简简单单一个串口,在Linux环境下踩了无数的雷。这里用最简单的方式实现串口通讯。
把串口的TX和RX短接,就可以收到我们发的数据了。

2. 查看串口名称

打开终端,输入命令行,看看现在设备上有的串口。看看你想用哪一个。

//查看串口名称
ls -l /dev/ttyS*

//终端输出
crw-rw---- 1 root dialout 4, 67 728 08:51 /dev/ttyS1
crw-rw---- 1 root dialout 4, 67 728 08:51 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 728 08:51 /dev/ttyS3

3. QT代码

QT5以上的版本,可以使用“serialport”非常方便。
在.pro文件中加入一句话

QT       += serialport

简单说,串口总共分三步:
第一步初始化

    myCom = new QSerialPort();//这个在.h中定义了 QSerialPort *myCom;//声明对象
    myCom->setPortName("/dev/ttyS3");//串口的名称
    myCom->open(QIODevice::ReadWrite);//读写模式
    myCom->setBaudRate(QSerialPort::Baud9600);//波特率
    myCom->setBaudRate(QSerialPort::Data8);//8位数据
    myCom->setParity(QSerialPort::NoParity);//无校验位
    myCom->setStopBits(QSerialPort::OneStop);//1位停止
    myCom->setFlowControl(QSerialPort::NoFlowControl);//无数据流控制

    connect(myCom,SIGNAL(readyRead()),this,SLOT(getdata()));//连接接收的槽函数

第二步发送

void MainWindow::on_pushButton_clicked()
{
    char sd[2];
    sd[0]='O';
    sd[1]='K';
    qWarning()<<"OK";
    myCom->write(sd,2);//发送两位
}

第三步接收

void MainWindow::getdata()
{
    QByteArray buf_data;            //接收数据,qByteArray是最常用的类
    buf_data = myCom->readAll();    //接收数据
    qWarning()<<buf_data.size();    //打印数据长度
    qWarning()<<buf_data.data();    //打印数据
}

界面,就一个按钮发送用。
Linux下QT5以上版本串口的最简单实现(测试可用)
输出结果:
我们需要把串口的TX和RX短接,就可以收到我们发的数据了。
Linux下QT5以上版本串口的最简单实现(测试可用)
这里的意思是收到两次数据,第一次一个’O’,第二次一个’K’。
但是我们发送的是两位数据“OK”。
出现这种情况是因为程序运行速度远远超过发送的速度。
第二个数没到呢,第一个数据已经处理完了。
这里就需要协议了,定义数据的长度和起始位和停止位,然后整合数据。
但是能收到数据就表示串口好使了。

4. 存在的问题的问题

问题1:上文已经提到的数据断开的问题。

需要协议,定义数据的长度和起始位和停止位,然后整合数据。

问题2:权限不足有可能导致串口打不开。

部分linux系统的串口权限只开放给root,需要用命令行打开QT再运行程序。

su root
密码://我的是00000000

/usr/bin/qtcreator

问题3:qWarning的使用

再linux下,qDebug()是用不了的。
只能使用qWarning,目前来看功能完全一样,头文件是:

#include <QDebug>

工程下载链接

本文地址:https://blog.csdn.net/qq_36353009/article/details/107632116