- 概念
在常见的通信方式中,少不了串口通信,在应用层,QT为我们提供了专门应用于串口通信的接口; QSerialPort和QSerialPortInfo。
QSerialPort类提供了操作串口的各种接口;
QSerialPortInfo是一个辅助类,主要提供了计算机中可用串口的各种信息;
- 使用方法
1、首先我们再使用串口之前,先在QT的工程文件(.pro)中增加如下内容:
QT += serialport
2、在使用串口时,我们需要获取当前设备所拥有的串口号,以及对它进行一系列的初始化操作:
(1)获取串口信息:
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();
}
我们要确定打开某个设备串口时,通常情况下是根据PortName确定的,但是有时候我们设备插入时串口名会有所变化,因为此时利用串口编号(serialNumber),这个号码一般来说是唯一的
(2)打开进行初始化设置串口:
if(m_serialDriver->open(QIODevice::ReadWrite))
{
m_serialDriver->setBaudRate(QSerialPort::Baud9600, QSerialPort::AllDirections);//设置波特率
m_serialDriver->setDataBits(QSerialPort::Data8);//设置数据函数
m_serialDriver->setParity(QSerialPort:: NoParity);//设置奇偶校验
m_serialDriver->setStopBits(QSerialPort::OneStop);// 设置停止位的函数
m_serialDriver–>setFlowControl(QSerialPort::NoFlowControl); //设置控制流模式的函数,此属性保持所需的流控制模式
}
3、判读串口是否打开,以及关闭串口
m_serialDriver->isOpen();//判读串口是否打开,打开为true,关闭为false
m_serialDriver->close();//关闭串口
4、接收和发送数据
(1)接收
connect(m_serialDriver, SIGNAL(readyRead()), this, SLOT(recvSerialData()) );//绑定接收槽函数,当串口收到数据会触发进入接收函数
.....
void recvSerialData()
{
QByteArray data = m_serialDriver->readAll();//读取串口数据
int recvSize = data.size();
}
(2)发送数据
QByteArray sendArr;//该数据为要发送的数据;
m_serialDriver->write(sendArr.data(),sendArr.size());