yuxin6483 2017-11-16 06:32 采纳率: 50%
浏览 2136

QT&C++ 串口通信问题-qextserialport第三方串口类,发出的数据到接收端不正常

用QextSerialPort第三方串口时,发出去的数据正常(转换为Byte都是正常的),可到了接收方面,接收的数据不是0X80就是0X00,很不解

QextSerialPort 下载的是 qextserialport-1.2win-alpha.zip

如图:发送显示正常图片说明

源码如下:
QextserialportDEMO::QextserialportDEMO(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);

QObject::connect(ui.pbtnSetting, SIGNAL(clicked()), this, SLOT(OnpbtnSetting()));
QObject::connect(ui.pbtnSend, SIGNAL(clicked()), this, SLOT(OnpbtnSend()));

serialName = "COM5";

myCom = new Win_QextSerialPort(serialName, Win_QextSerialPort::EventDriven);
connect(myCom, SIGNAL(readyRead()), this, SLOT(Receive()));

}

QextserialportDEMO::~QextserialportDEMO()
{

}

void QextserialportDEMO::OnpbtnSetting()
{
Open();
}

void QextserialportDEMO::OnpbtnSend()
{
Send(QStringLiteral("123"));
//Send(QStringLiteral("中国"));
}

//打开串口
bool QextserialportDEMO::Open()
{

if (!myCom->isOpen())
{
    myCom->setBaudRate(BAUD9600);           //设置波特率           
    myCom->setDataBits(DATA_8);             //设置数据位
    myCom->setParity(PAR_NONE);
    myCom->setStopBits(STOP_1);     
    myCom->setFlowControl(FLOW_OFF);        //设置数据流控制     
    myCom->setTimeout(TIME_OUT);            //设置延时

    QString info;

    if (myCom->open(QIODevice::ReadWrite))
    {
        info = QString(QStringLiteral("成功打开串口 Serial NO:%1 BaudRate=%2 DataBits=%3 Paritys=%4 StopBits=%5")
            .arg(myCom->portName())
            .arg(myCom->baudRate())
            .arg(myCom->dataBits())
            .arg(myCom->parity())
            .arg(myCom->stopBits()));
    }
    else
    {
        myCom->close();
    }
}


return true;

qDebug("打开串口成功");

}

//关闭串口
void QextserialportDEMO::Close()
{
if (myCom != NULL)
{
myCom->close();
delete myCom;
myCom = NULL;
}
}

BOOL QextserialportDEMO::IsOpen()
{
return myCom->isOpen();
}

//接收数据
void QextserialportDEMO::Receive()
{
QThread::msleep(100);

QString strData;
QByteArray temp = myCom->readAll();

tempData = temp;        //将数据存起来

if (!temp.isEmpty())
{
    strData = temp;
}

}

QByteArray QextserialportDEMO::ReadData()
{
return tempData;
}

//发送数据
void QextserialportDEMO::Send(QString str)
{
QByteArray buf;

buf = str.toUtf8();

try
{
    //发送数据
    myCom->write(buf);
}
catch (QString msg)
{
    throw (__FUNCTION__ + msg);
}

}

求知情者帮忙,烦劳告知,在下感激不尽

  • 写回答

1条回答

  • kidults 2017-11-17 02:50
    关注

    是不是两边的串口属性设置不一样?最好用串口助手测试,自己的程序给串口助手发,串口助手给程序发,排除一下自己程序发送方还是接收方出了问题

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)