qt串口通信问题,向串口发送数据后,试用readall()读取不到数据

于什么伦伦伦 2015-11-12 04:13:14
qt版本为qt5.5.1
先上代码:

问题是readAll()函数读不到串口数据,求解,谢谢了
--------------------------------------------------------------------
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "spcomm.h"
#include <QMainWindow>
//#include <QtSerialPort/QtSerialPort>
#include <QSerialPort>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_pushButton_clicked();


void on_pushButton_2_clicked();

private:
Ui::MainWindow *ui;
SPComm *m_spcomm;
};

#endif // MAINWINDOW_H
-------------------------------------------------------------------
spcomm.h
#ifndef SPCOMM_H
#define SPCOMM_H
#include <QtSerialPort/QtSerialPort>
#include <QObject>
#include <QByteArray>
class SPComm : public QObject
{
Q_OBJECT
public:
void * memcpy(char *strDest, const char *strSrc, int Count);
explicit SPComm(QObject *parent = 0);
~SPComm();
bool isOpen();
void setPortName(const QString &name);//
QString portName();
virtual bool open();

void read(QByteArray *Data);



protected:
QString m_portName;//我的串口名
int m_baudRate;//我的波特率
QSerialPort *m_serialPort;//实例
signals:

public slots:
};

#endif // SPCOMM_H
------------------------------------------------------
mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_spcomm = new SPComm(this);
}

MainWindow::~MainWindow()
{
delete m_spcomm;
delete ui;
}

void MainWindow::on_pushButton_clicked()
{

QString str ;
m_spcomm->setBaudRate(115200);//波特率
m_spcomm->setPortName("com1");//串口名
str = m_spcomm->portName();


ui->lineEdit->setText(str);
if(m_spcomm->open())
qDebug() << "打开串口成功";
else
{
qDebug() << "打开串口error";
}
}


void MainWindow::on_pushButton_2_clicked()
{

QByteArray Data;

m_spcomm->read(&Data);//调用read函数
qDebug()<<Data;//问题在这里输出为空



}
-----------------------------------------------------------------

spcomm.cpp

#include "spcomm.h"
//#include <Qstring.h>
//这个函数用来设置波特率,打开串口的时候用到
static QSerialPort::BaudRate getBaudRate(int baudRate)
{
switch (baudRate)
{

case 115200:
return QSerialPort::Baud115200;
default:
return QSerialPort::UnknownBaud;
}
}
//这个函数用来设置串口的名字
//window 下用"com1" linux下用"/dev/ttyS0"
void SPComm::setPortName(const QString &name)
{
m_portName = name;
}
//用来获取串口的名字
QString SPComm::portName()
{
return m_portName;
}


//用来打开串口,调用前,先设置串口名字和波特率
bool SPComm::open()
{
// if (m_serialPort->isOpen())
// {
// return true;
// }
//m_serialPort->setPortName(m_portName);
m_serialPort->setPortName(m_portName);
return m_serialPort->open(QSerialPort::ReadWrite);
}


void SPComm::read(QByteArray *Data)//把读取和写入放到一个函数中了
{

char send[] = {0x80,0x00,0x1A,0x80,0x06,0x00,0x06,0x03,0x0B,0x00,0x01,0xE8,0x48,0x01,0xC2,0x00,0x03,0x05,0x01,0x07,0x01,0x00,0x00,0x07,0xA9,0xDE};
m_serialPort->write(send, sizeof(send));
m_serialPort->flush();//这局结束发send中的数据
*Data=m_serialPort->readAll();//问题在这里!!!!这句读取串口数据在调试中为空,弄不清楚为何读不到,使用其他收数据工具发现这局结束会回复数据,但是我接不到,我尝试过屏蔽掉*Data=m_serialPort->readAll();及相关代码使用其他收数据工具发现这个函数结束串口也会把数据恢复出来,如果不屏蔽,这句之行结束数据被回复出来...

}


SPComm::SPComm(QObject *parent) : QObject(parent)
{
m_serialPort = new QSerialPort();
m_baudRate = 115200;
m_portName = "0";


}
//析构的时候 删除 数据
SPComm::~SPComm()
{
delete m_serialPort;
}
----------------------------------------------------
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}
...全文
2042 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
于什么伦伦伦 2015-11-13
  • 打赏
  • 举报
回复
我想知道自己错在哪里
赵4老师 2015-11-12
  • 打赏
  • 举报
回复
MSDN98里面的串口通信例子代码。
于什么伦伦伦 2015-11-12
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix, MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 先下载安装MSDN98 然后参考: MSDN98\SAMPLES\MSDN\TECHART\4918\ABOUT.C MSDN98\SAMPLES\MSDN\TECHART\4918\ABSTRACT.TXT MSDN98\SAMPLES\MSDN\TECHART\4918\ERROR.C MSDN98\SAMPLES\MSDN\TECHART\4918\INIT.C MSDN98\SAMPLES\MSDN\TECHART\4918\MAKEFILE MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.C MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.H MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.ICO MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.MAK MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.RC MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.ZIP MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY2.ICO MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY3.ICO MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY4.ICO MSDN98\SAMPLES\MSDN\TECHART\4918\READER.C MSDN98\SAMPLES\MSDN\TECHART\4918\READSTAT.C MSDN98\SAMPLES\MSDN\TECHART\4918\RESOURCE.H MSDN98\SAMPLES\MSDN\TECHART\4918\SETTINGS.C MSDN98\SAMPLES\MSDN\TECHART\4918\STATUS.C MSDN98\SAMPLES\MSDN\TECHART\4918\TRANSFER.C MSDN98\SAMPLES\MSDN\TECHART\4918\TTYINFO.H MSDN98\SAMPLES\MSDN\TECHART\4918\WRITER.C
------------------------------------------------------------------------- 这是什么
赵4老师 2015-11-12
  • 打赏
  • 举报
回复
MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix, MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 先下载安装MSDN98 然后参考: MSDN98\SAMPLES\MSDN\TECHART\4918\ABOUT.C MSDN98\SAMPLES\MSDN\TECHART\4918\ABSTRACT.TXT MSDN98\SAMPLES\MSDN\TECHART\4918\ERROR.C MSDN98\SAMPLES\MSDN\TECHART\4918\INIT.C MSDN98\SAMPLES\MSDN\TECHART\4918\MAKEFILE MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.C MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.H MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.ICO MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.MAK MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.RC MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY.ZIP MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY2.ICO MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY3.ICO MSDN98\SAMPLES\MSDN\TECHART\4918\MTTTY4.ICO MSDN98\SAMPLES\MSDN\TECHART\4918\READER.C MSDN98\SAMPLES\MSDN\TECHART\4918\READSTAT.C MSDN98\SAMPLES\MSDN\TECHART\4918\RESOURCE.H MSDN98\SAMPLES\MSDN\TECHART\4918\SETTINGS.C MSDN98\SAMPLES\MSDN\TECHART\4918\STATUS.C MSDN98\SAMPLES\MSDN\TECHART\4918\TRANSFER.C MSDN98\SAMPLES\MSDN\TECHART\4918\TTYINFO.H MSDN98\SAMPLES\MSDN\TECHART\4918\WRITER.C

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧