QT串口通信上位机设置
串口设置
pro文件里添加
QT += core gui serialport
.h文件中添加
#include <QtSerialPort/QSerialPort>
#include <QSerialPortInfo>//public:中添加QSerialPort *M ;//串口指针
cpp文件中添加
QStringList serialNamePort;M = new QSerialPort(this);foreach(const QSerialPortInfo &info ,QSerialPortInfo::availablePorts()){serialNamePort<<info.portName();}ui->Cboxport->addItems(serialNamePort);//Cboxport为设置的QComboBox,得到的串口号将会显示在控件中
Cboxport为设置的QComboBox,得到的串口号将会显示在控件中,如下所示
定义串口参数与打开串口
M->setPortName(ui->Cboxport->currentText()); //控件中目前显示的串口名称M->setBaudRate(QSerialPort::Baud9600); //波特率 9600M->setDataBits(QSerialPort::Data8); //数据位 8位M->setParity(QSerialPort::NoParity); //校验位 无校验M->setStopBits(QSerialPort::OneStop); //停止位 1位M->setFlowControl(QSerialPort::NoFlowControl); //无流控if(M->open(QIODevice::ReadWrite)==true){QMessageBox::information(this,"提示","成功");}else{QMessageBox::critical(this,"提示","失败");}
定时器
头文件
#include <Qtimer>
#include <Qtime>
public:QTimer timer;QTime time;
开启定时器
timer.start(50); //单位毫秒,开始定时timer.stop(); //停止定时
中断函数设置
connect(&timer,SIGNAL(timeout()),this,SLOT(timeout_slot()));
//每过50ms,timeout()触发一次,通过connect链接到中断函数中
void Widget::timeout_slot(){}
发射16进制数据
第一种方法
char *data = new char [2];data[1] = '\\0';data[0] = static_cast<char>(0xaa);//将16进制数据转化为字符,再将数据发送出去M->write(data);
缺点:无法发送0x00
第二种方法
QByteArray senddata;
senddata.resize(3);//定义数组大小
senddata[0] = static_cast<char>(0xAA);
senddata[1] = static_cast<char>(0x12);
senddata[2] = static_cast<char>(0x00);
M->write(senddata);
可以将数据0x00发送出去