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
可以直接下载