当前位置: 移动技术网 > 网络运营>服务器>Linux > Linux下QT5以上版本串口的最简单实现(测试可用)

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

2020年07月29日  | 移动技术网网络运营  | 我要评论

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();    //打印数据
}

界面,就一个按钮发送用。
在这里插入图片描述
输出结果:
我们需要把串口的TX和RX短接,就可以收到我们发的数据了。
在这里插入图片描述
这里的意思是收到两次数据,第一次一个’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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网