自学内容网 自学内容网

QT与嵌入式——搭建串口

1、源码

由于我需要不止一个串口来进行数据交互,所以简单的封装了一下

void Usb_Init(QString portName, QSerialPort *Port)
{
    Port->setPortName(portName);
    Port->setBaudRate(QSerialPort::Baud115200); // 设置波特率,根据你的开发板配置修改
    Port->setDataBits(QSerialPort::Data8);     // 数据位
    Port->setParity(QSerialPort::NoParity);    // 奇偶校验
    Port->setStopBits(QSerialPort::OneStop);   // 停止位
    Port->setFlowControl(QSerialPort::NoFlowControl); // 流控制

    if (!Port->open(QIODevice::ReadWrite)) {
        qDebug() << portName << "usb Error opening:" << Port->errorString();
    }
    else
    {
        qDebug() << portName << "usb open";
    }
}

 下面是具体的调用方法ttyUSB0是自己的串口名,需要自己去查找出来

一般可以通过下面指令来查找可以用的串口名词

ls /dev/tty*
serial0 = new QSerialPort(this);
Usb_Init("ttyUSB0",serial0);
connect(serial0, &QSerialPort::readyRead, this,&Widget::ttyUSB);
serial1 = new QSerialPort(this);
Usb_Init("ttyUSB1",serial1);
connect(serial1, &QSerialPort::readyRead, this,&Widget::ttyUSB);

当然,如果需要对数据进行区分,也可以像我这样做

void Widget::ttyUSB()
{
    QSerialPort *serial = qobject_cast<QSerialPort*>(sender());
    if (serial == serial0)
    {
        // 处理serial0的数据
        Usb_Data0 = serial0->readAll();
    }
    else if (serial == serial1)
    {
        // 处理serial1的数据
        Usb_Data1 = serial1->readAll();
    }
    Usb_Data = Usb_Data0.append(Usb_Data1);
    QString temp = QString::fromUtf8(Usb_Data0);
}

 大部分变量都被我定义成了成员变量(在类里作为全局变量使用)

需要的可以自己找一下

private:
    Ui::Widget *ui;
    QSerialPort *serial0,*serial1;
    QByteArray Usb_Data0,Usb_Data1,Usb_Data;

    QTcpServer *server;
    QTcpSocket *socket;
    QByteArray read_data;

    QSqlDatabase db_connection;
    QString db_filename;
    QList<QStringList> total;
    QSqlQuery query;
    QByteArray byteArray;

    bool isInquireMode;

    QNetworkAccessManager *networkManager;
    QString time;


    QTimer *timer0,*timer1,*timer2;

 缺少头文件的可以直接根据类型和报错来添加头文件

2、嵌入式开发板没有串口库怎么办??

很简单——如果像我一样搭建了ssh的,可以直接通过scp将编译库的库文件直接copy到开发板的环境变量下面

具体实现方式:

“/opt/center_control/bin/center_control: error while loading shared libraries: libQt5SerialPort.so.5: cannot open shared object file: No such file or directory”首先如果你的QT有和我类似的报错,代表你的开发板的环境变量里,没有对应的QT库

我们可以通过

locate libQt5SerialPort.so.5

来找到我们系统里是否有该库

/opt/st/fsmp1a/3.1-snapshot/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi/usr/lib/libQt5SerialPort.so.5
/opt/st/fsmp1a/3.1-snapshot/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi/usr/lib/libQt5SerialPort.so.5.14
/opt/st/fsmp1a/3.1-snapshot/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi/usr/lib/libQt5SerialPort.so.5.14.1
/opt/st/fsmp1a/3.1-snapshot/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi/usr/lib/.debug/libQt5SerialPort.so.5.14.1

这些是我的查找出来的用于fsmpla开发板的串口编译的QT库

通过scp命令下载到开发板就可以了

具体命令

scp /home/user/mydocument.txt user@192.168.1.100:/home/user/

不过环境变量在哪,需要自己将/home/user/修改为自己的环境变量目录,实在不会就都加,反正是加过去,又不是修改 

如果自己linux系统里面也没有该库,可以直接通过apt命令添加

sudo apt-get install libqt5serialport5

可以直接下载 

 

 

 

 

 

 


原文地址:https://blog.csdn.net/zxtzxt12138/article/details/143928094

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!