最近手头上的一个STM32的项目需要通过串口通信控制,现在手头上的开发已经完全转到FEDORA之下。所以用QT做了一个小测试工具,直接快速创建工程,选择widget,带ui文件。其中需要用到串口,在pro文件中添加QT += serialport,在头文件中包含:
#include
#include
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
public:
QList
bool com_open;
QSerialPort *comport;
};
其中可以通过执行下面的程序将串口信息添加到list中。
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
qDebug() << "Name : " << info.portName();
qDebug() << "Description : " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
qDebug() << "Serial Number: " << info.serialNumber();
qDebug() << "System Location: " << info.systemLocation();
list.append(info);
}
在按键的事件中,实现打开或关闭串口:
void Widget::on_pushButton_clicked()
{
if (com_open)
{
comport->close();
ui->pushButton->setText(QString("打开串口"));
com_open = false;
}
else
{
QSerialPortInfo info;
info = list.at(ui->portlist->currentIndex());//ui->portlist是一个combox
qDebug() << "Name : " << info.portName();
qDebug() << "Description : " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
qDebug() << "Serial Number: " << info.serialNumber();
qDebug() << "System Location: " << info.systemLocation();
comport->setPort(info);
//comport->setPortName(filename);
if (comport->open(QIODevice::ReadWrite))
{
ui->pushButton->setText(QString("关闭串口"));
comport->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);
comport->setDataBits(QSerialPort::Data8);
comport->setParity(QSerialPort::NoParity);
comport->setStopBits(QSerialPort::OneStop);
// my_serialport->setStopBits(QSerialPort::TwoStop);
comport->setFlowControl(QSerialPort::NoFlowControl);
com_open = true;
}
else
QMessageBox::information(this, tr("Opening com failed"), tr("Could not open file %1").arg(info.portName()));
}
}
然后可以通过comport->write来发送串口数据。
参考:
Qt 串口类QSerialPort 使用笔记 -- blog.csdn.net/liyuanbhu/article/details/45540825
QT5 串口收发实例代码 -- http://blog.csdn.net/liang890319/article/details/13502885