当前位置: 首页 > article >正文

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

可以直接下载 

 

 

 

 

 

 


http://www.kler.cn/a/409313.html

相关文章:

  • 基于STM32的智能家居电器控制系统
  • 【Rhino】【Python】Create a series of Blocks according to Value of object Property
  • 搜索二维矩阵
  • 【视频】二维码识别:libzbar-dev、zbar-tools(zbarimg )
  • 微信分账系统供应链分润微信支付 (亲测源码)
  • 日常开发记录-正确的prop传参,reduce搭配promise的使用
  • cocoscreater3.8.4生成图集并使用
  • 青训10_1121_01_游戏排名第三大的分数
  • C 标准库 - <signal.h>
  • Roslyn和csc的关系?C#编程语言的命令行用法?C#编译器支持的版本?
  • HarmonyOS Next 简单上手元服务开发
  • 无插件直播流媒体音视频播放器EasyPlayer.js播放器的g711系列的音频,听起来为什么都是杂音
  • 国内外优秀的视频提取音频在线工具分享
  • Vue 动态给 data 添加新属性深度解析:问题、原理与解决方案
  • 应急响应靶机——linux1
  • 5、AI测试辅助-生成测试用例思维导图
  • C语言练习.if.else语句.strstr
  • 存储过程 与 表值函数
  • 【jvm】解释器
  • 丹摩|丹摩智算平台深度评测
  • C语言菜鸟入门·关键字·int的用法
  • 算法训练(leetcode)二刷第三十天 | *46. 携带研究材料(第六期模拟笔试)、416. 分割等和子集
  • C# 数据结构之【图】C#图
  • D74【 python 接口自动化学习】- python 基础之HTTP
  • 【Android】View的解析—滑动篇
  • 手机发展史介绍