使用QT制作串口上位机与下位机通讯。 下面是QT C++程序 发送按钮读取下位机数据 void MainWindow::on_ReadDataButton_clicked(){ unsigned char Read_Flash[8]={0xff,0xff,0x01,0x00,0x00,0x00,0x00,0xff};
if(sizeof(Read_Flash) != serial->write((char *)Read_Flash,sizeof(Read_Flash))) { QMessageBox msgBox; msgBox.setText("读取发送失败!"); msgBox.exec(); return; } QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Ready_Serialtest);} 串口读到数据开始处理分析 void MainWindow::Ready_Serialtest(){
char *recvDataBuf; int len; QByteArray buf; buf = serial->readAll(); QString str = ui->textEdit->toPlainText();//读取textedit的值 str+=tr(buf); ui->textEdit->clear(); ui->textEdit->append(str);//向textedit中末尾追加str字符串 recvDataBuf=buf.data(); len = buf.size(); if((recvDataBuf[0]==0x31)&&(recvDataBuf[1]==0x32)&&(recvDataBuf[2]==0x33)\ &&(recvDataBuf[3]==0x34)&&(recvDataBuf[4]==0x45)&&(recvDataBuf[5]==0x46)\ &&(recvDataBuf[6]==0x37)&&(recvDataBuf[7]==0x38)&&(recvDataBuf[8]==0x39)\ &&(recvDataBuf[9]==0x30)&&(recvDataBuf[10]==0x31)&&(recvDataBuf[11]==0x34)){ QMessageBox msgBox; msgBox.setText("串口读取成功!"); msgBox.exec(); return; } buf.clear();}
下位机程序: if((buff[0]==0XFF)&&(buff[1]==0XFF)&&(buff[2]==0X01)&&(buff[3]==0X00)&&(buff[4]==0X00)&&(buff[5]==0X00)&&(buff[6]==0X00)&&(buff[7]==0Xff)) { u8 send_buff[12] ={0x31,0x32,0x33,0x34,0x45, 0x46,0x37,0x38,0x39,0x30, 0x31,0x34};
bsp_UART1_Send_Data(send_buff,sizeof(send_buff)); RS232_Clear(); }上位机能读取倒数据并现在文本框: 通过调试模式查看,每次 recvDataBuf=buf.data(); len = buf.size(); 两个函数与显示在文本框的数据长度不一致,总是长度小于12。导致最后进行分析对比时失败。不能正常显示出对话框“串口读取成功!”。 有人能知道问题出在哪里吗?