QtSerialPort模块是QT5中附加模块的一个模块,为硬件和虚拟的串口提供统一的接口。串口由于其简单和可靠,目前在像嵌入式系统、机器人等工业中依旧用得很多。使用QtSerialPort模块,开发者可以大大缩短开发串口相关的应用程的周期。
要在应用程序中使用QSerialPort模块,需要在.pro文件中添加如下内容:
QT += serialport
1.获取串口
当一个串口插在电脑上后,就可以在设备管理器中找到这个串口了,同样在程序中要连接串口,我们需要先找到这个串口
QList<QSerialPortInfo> list = QSerialPortInfo::availablePorts();
foreach (QSerialPortInfo info,list)
{
ui->coms_comboBox->addItem(info.portName());
}
2.设置串口参数
serialport设置参数包括串口名称、波特率、数据位、校验位、停止位、流控制
(1)设置串口名称
serialport->setPortName(com);
(2)设置波特率
波特率为115200:serialport->setBaudRate(QSerialPort::Baud115200);
波特率为57600:serialport->setBaudRate(QSerialPort::Baud57600);
波特率为38400:serialport->setBaudRate(QSerialPort::Baud38400);
波特率为19200:serialport->setBaudRate(QSerialPort::Baud19200);
波特率为9600:serialport->setBaudRate(QSerialPort::Baud9600);
波特率为4800:serialport->setBaudRate(QSerialPort::Baud4800);
波特率为2400:serialport->setBaudRate(QSerialPort::Baud2400);
波特率为1200:serialport->setBaudRate(QSerialPort::Baud1200);
(3)设置数据位
数据位为5:serialport->setDataBits(QSerialPort::Data5);
数据位为6:serialport->setDataBits(QSerialPort::Data6);
数据位为7:serialport->setDataBits(QSerialPort::Data7);
数据位为8:serialport->setDataBits(QSerialPort::Data8);
(4)设置停止位
停止位为1:serialport->setStopBits(QSerialPort::OneStop);
停止位为1.5:serialport->setStopBits(QSerialPort::OneAndHalfStop);
停止位为2:serialport->setStopBits(QSerialPort::TwoStop);
(5)设置校验位
无校验位:serialport->setParity(QSerialPort::NoParity);
Odd:serialport->setParity(QSerialPort::OddParity);
Even:serialport->setParity(QSerialPort::EvenParity);
Mark:serialport->setParity(QSerialPort::MarkParity);
Space:serialport->setParity(QSerialPort::SpaceParity);
(6)设置流控制
无流控制:serialport->setFlowControl(QSerialPort::NoFlowControl);
RTS/CTS:serialport->setFlowControl(QSerialPort::HardwareControl);
XON/XOFF:serialport->setFlowControl(QSerialPort::SoftwareControl);
DTR/DSR:serialport->setFlowControl(QSerialPort::UnknownFlowControl);
3.打开串口
设置好串口的参数后,我们执行open,这个方法返回的是一个bool类型的值,如果为true,则表示打开成功,否则表示打开失败
serialport->open(QSerialPort::ReadWrite);
4.读取串口数据
QString data=serialport->readAll();
5.写入数据到串口中
serialport->write(command.toUtf8());