在windows下的串口读写
添加serialport模块支持
QT += core gui serialport
添加头文件
#include <QtSerialPort>
创建串口对象
private:
QSerialPort *serial;
创建必要的槽函数
private slots:
void getData(); // 串口数据接受的槽函数
void writeData(char *data, qint64 len); // 数据发送
void error(QSerialPort::SerialPortError serialPortError); // 操作错误槽函数
端口号获取
QList<QString> portList;
portList.clear();
QList<QSerialPortInfo> serialPortInfo = QSerialPortInfo::availablePorts();
//搜索串口
for (int i=0;i<serialPortInfo.length();i++) {
qDebug() << "Name : " << serialPortInfo[i].portName();
qDebug() << "Description : " << serialPortInfo[i].description();
qDebug() << "Manufacturer: " << serialPortInfo[i].manufacturer();
portList.append(serialPortInfo[i].portName());
}
初始化串口参数连接相关槽函数
serial = new QSerialPort(this);
serial->setPortName("COM25"); // 设置端口
serial->setBaudRate(115200); // 波特率
serial->setDataBits(QSerialPort::Data8); // 数据位
serial->setParity(QSerialPort::NoParity); // 校验位
serial->setStopBits(QSerialPort::OneStop); // 停止位
serial->setFlowControl(QSerialPort::NoFlowControl); // 无数据流控
// 绑定后信号槽函数:
connect(serial, SIGNAL(readyRead()), this, SLOT(getData()));
connect(serial, SIGNAL(errorOccurred(QSerialPort::SerialPortError)),this, SLOT(error(QSerialPort::SerialPortError)));
// 确认参数没有问题过后就以可读可写方式打开串口
serial->open(QIODevice::ReadWrite);
槽函数
void MainWindow::getData()
{
char rebuf[1024]; // 数据接受缓存
int length = serial->read(rebuf, 1024);
// 打印接收到的内容,length是实际读取的数量
for(int i=0; i<length; i++)
{
qDebug("%d",rebuf[i]);
}
}
// 可以当成普通函数来使用,根据需要来处理是否需要连接信号
void MainWindow::writeData(char *data, qint64 len)
{
if(serial->isOpen())
{
serial->write(data,len);
}
else
{
qDebug("端口未打开");
}
}
void MainWindow::error(QSerialPort::SerialPortError serialPortError)
{
}
上面具体serialPortError具体是什么错可以添加判断根据情况处理,可能出现的错误类型如下
enum SerialPortError {
NoError,
DeviceNotFoundError,
PermissionError,
OpenError,
ParityError,
FramingError,
BreakConditionError,
WriteError,
ReadError,
ResourceError,
UnsupportedOperationError,
UnknownError,
TimeoutError,
NotOpenError
};
Q_ENUM(SerialPortError)
比较简单适合初学者,可以直接下载demo。