QT 串口基本通信笔记
QT 串口基本通信笔记
- QT 串口基本通信笔记
- 所需 函数
- 1. 获取串口列表 **QSerialPortInfo::availablePorts**
- 2. 设置 需要打开的串口名称 **setPortName** ,(这个一般由 **QSerialPortInfo::availablePorts** 提供)
- 3. 设置波特率 **setBaudRate**
- 4. 设置数据位 **setDataBits**
- 5. 设置奇偶效验位 **setParity**
- 6. 设置停止位 **setStopBits**
- 7. 设置控制流模式 **setFlowControl**
- 8. 链接接受数据信号 **readyRead**
- 9. 链接发送数据信号 **bytesWritten**
- 实例 一
- 实例 二
Qt 中串口通讯提供了 一个QtSerialPort模块,其中提供了 两个c++类,分别是QSerialPort 和QSerialPortInfo。
QSerialPort 类提供了操作串口的各种接口。
QSerialPortInfo 是一个辅助类,可以提供计算机中可用串口的各种信息。
要在应用程序中使用这些类,请使用以下include语句:
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
QT 项目想要使用 ***QtSerialPort***模块必须在.pro 文件中加入以下代码:
QT += serialport
所需 函数
1. 获取串口列表 QSerialPortInfo::availablePorts
[static] QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
QSerialPortInfo 提供的静态函数,
返回系统上可用的串口列表
主要作用是用来遍历 系统上可以使用的所有串口信息,以供 QSerialPort 链接使用。
具体用请看 实例 一
2. 设置 需要打开的串口名称 setPortName ,(这个一般由 QSerialPortInfo::availablePorts 提供)
void setPortName(const QString &name);
QSerialPort 提供的设置串行端口的名称。如果需要,可以将串行端口的名称作为短名称或长系统位置传递。
3. 设置波特率 setBaudRate
bool setBaudRate(qint32 baudRate, Directions directions = AllDirections);
qint32 baudRate(Directions directions = AllDirections) const;
QSerialPort 提供的设置波特率的函数,对应此属性保留所需方向的数据波特率。
如果设置成功或在打开端口之前设置,则返回“真”;否则返回“假”,并设置一个错误代码,可以通过访问qserialport::error属性的值来获取该代码。要设置波特率,请使用枚举QSerialPort::BaudRate或任何正qint32值。
注意:如果在打开端口之前设置了该设置,则实际的串行端口设置将在qserialPort::open()方法中自动完成,然后端口打开成功。
默认值为baud9600,即每秒9600位。
4. 设置数据位 setDataBits
bool setDataBits(DataBits dataBits);
DataBits dataBits() const;
QSerialPort 提供的数据位的函数。
设置数据的函数,此属性将数据位保存在帧中。
如果设置成功或在打开端口之前设置,则返回“true”;否则返回“false”,并设置一个错误代码,可以通过访问 QSerialPort::error 属性的值来获取该代码。
注意:如果在打开端口之前设置了该设置,则实际的串行端口设置将在QSerialPort::open() 方法中自动完成,然后端口打开成功。
默认值为QSerialPort::Data8,即8个数据位。
数据位使用的是QT提供的枚举:QSerialPort::DataBits
5. 设置奇偶效验位 setParity
bool setParity(Parity parity);
Parity parity() const;
QSerialPort 提供的设置奇偶校验函数,此属性保持奇偶校验模式。
如果设置成功或在打开端口之前设置,则返回“true”;否则返回“false”,并设置一个错误代码,可以通过访问QSerialPort::error 属性的值来获取该代码。
注意:如果在打开端口之前设置了该设置,则实际的串行端口设置将在**QSerialPort::open()**方法中自动完成,然后端口打开成功。
默认值为NoParity,即无奇偶校验。
6. 设置停止位 setStopBits
bool setStopBits(StopBits stopBits);
StopBits stopBits() const;
QSerialPort 提供的 设置停止位的函数,此属性保存帧中的停止位数。
如果设置成功或在打开端口之前设置,则返回“true”;否则返回“false”,并设置一个错误代码,可以通过访问QSerialPort::error 属性的值来获取该代码。
注意:如果在打开端口之前设置了该设置,则实际的串行端口设置将在**QSerialPort::open()**方法中自动完成,然后端口打开成功。
默认值为***OneStop***,即1个停止位。
7. 设置控制流模式 setFlowControl
bool setFlowControl(FlowControl flowControl);
FlowControl flowControl() const;
QSerialPort 提供的 设置控制流模式的函数,此属性保持所需的流控制模式。
默认值为NoFlowControl,即没有流控制。
8. 链接接受数据信号 readyRead
//!接收到数据信号
[signal] void QIODevice::readyRead()
QSerialPort* 提供的 每当有新数据可用于从设备的当前读取通道读取时,就会发出此信号。 仅当有新数据可用时(例如,当网络套接字上有新的网络数据有效负载时,或将新的数据块附加到设备上时),才会再次发出该数据。
readyRead() 不会递归地发出; 如果您重新进入事件循环或在连接到 readyRead() 信号的插槽内调用 waitForReadyRead() ,则不会重新发出该信号(尽管 ** waitForReadyRead()** 可能仍返回true)。
对于实现从QIODevice派生的类的开发人员请注意:当新数据到达时,您应该始终发出readyRead()(不要仅仅因为缓冲区中仍有待读取的数据而发出它)。 在其他情况下不要发出readyRead()。
另请参见bytesWritten()。
注:这个信号是 QSerialPort 从QIODevice 继承的。
9. 链接发送数据信号 bytesWritten
//! 写入数据信号数据信号
[signal] void QIODevice::bytesWritten(qint64 bytes)
QSerialPort* 提供的 每次将数据的有效负载写入设备的当前写入通道时,都会发出此信号。bytes参数被设置为在这个有效负载中写入的字节数。
实例 一
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
#include <QApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
qDebug() << "端口名称:" << info.portName();
qDebug() << "描述 : " << info.description();
qDebug() << "制造商: " << info.manufacturer();
qDebug() << "序号: " << info.serialNumber();
qDebug() << "系统的位置:" << info.systemLocation();
}
return a.exec();
}
实例 二
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
#include <QApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSerialPort *serial = new QSerialPort;
serial->setPortName("COM2");
bool opt = serial->open(QIODevice::ReadWrite);
if(opt){
qDebug()<<"打开成功";
}else {
qDebug()<<"打开失败";
}
//设置波特率
serial->setBaudRate(QSerialPort::Baud115200);
//设置数据位
serial->setDataBits(QSerialPort::Data8);
//设置奇偶效验位
serial->setParity(QSerialPort::NoParity);
//设置停止位
serial->setStopBits(QSerialPort::OneStop);
//设置流模式
serial->setFlowControl(QSerialPort::NoFlowControl);
//简单写入数据
serial->write("我在写数据");
return a.exec();
}