weixin_42135739
学习使我骄傲
采纳率0%
2021-03-05 17:23

ubunte QT串口发送只能一个一个字节的发送,发送10字节要几秒的时间

如题,

#include "ui_mainwindow.h"
#include "mainwindow.h"
#include "Thread_1.h"
#include "Thread_2.h"

MainWindow::MainWindow(QWidget *parent) : //开始运行
  QMainWindow(parent),
  ui(new Ui::MainWindow) //初始化指针UI
{
  ui->setupUi(this);

  thread_1=new QThread(this);
  worker_1=new Thread_1();
  worker_1->moveToThread(thread_1); //用moveToThread函数转移到一个Thread里

  thread_2=new QThread(this);
  worker_2=new Thread_2();
  worker_2->moveToThread(thread_2); //用moveToThread函数转移到一个Thread里

  //定时器_1
  ui->timer_th_1->setCheckable(true); //Checkable就能有两种状态-对应定时器开关
  connect(ui->timer_th_1,&QPushButton::clicked,worker_1,&Thread_1::slotTimerSwitch_1);
  connect(worker_1,&Thread_1::signalMessage_1,ui->textEditA_1,&QTextEdit::append); //worker操作结果
  connect(worker_1,&Thread_1::signalMessage_1,this,[this]{
      on_com_send_clicked(); //串口发送
    }); //worker操作结果
  //append = 追加数据    setText = 唯一数据
  thread_1->start(); //启动线程

  //定时器_2
  ui->timer_th_2->setCheckable(true); //Checkable就能有两种状态-对应定时器开关
  connect(ui->timer_th_2,&QPushButton::clicked,worker_2,&Thread_2::slotTimerSwitch_2);
  connect(worker_2,&Thread_2::signalMessage_2,ui->textEditA_2,&QTextEdit::append); //worker操作结果
  thread_2->start(); //启动线程

  myCom = new QSerialPort();//这个在.h中定义了 QSerialPort *myCom;//声明对象
  myCom->setPortName("/dev/ttyUSB0");//串口的名称
  myCom->open(QIODevice::ReadWrite);//读写模式
  myCom->setBaudRate(QSerialPort::Baud115200);//波特率
  myCom->setBaudRate(QSerialPort::Data8);//8位数据
  myCom->setParity(QSerialPort::NoParity);//无校验位
  myCom->setStopBits(QSerialPort::OneStop);//1位停止
  myCom->setFlowControl(QSerialPort::NoFlowControl);//无数据流控制
  connect(myCom,SIGNAL(readyRead()),this,SLOT(getdata()));//连接接收的槽函数
}

MainWindow::~MainWindow() //结束运行
{
  thread_1->quit();
  thread_1->wait();

  thread_2->quit();
  thread_2->wait();

  delete ui;
}

void MainWindow::on_clear_data_1_clicked() //清除1按钮事件
{
    ui->textEditA_1->clear();
}

void MainWindow::on_clear_data_2_clicked() //清除2按钮事件
{
    ui->textEditA_2->clear();
}

void MainWindow::getdata()
{
    QByteArray com_receive_data = myCom->readAll(); //接收数据,qByteArray是最常用的
    if (*com_receive_data.data() == '*')
      buff = "";
    else
      {
        buff += com_receive_data;
        ui->time_label_up_1->setText(buff);
      }
}


void MainWindow::on_com_send_clicked() //串口发送
{
  QByteArray com_send_data = "*ABCDEFGHIJK*"; //发送数据,qByteArray是最常用的类
  myCom->write(com_send_data, com_send_data.size()); //发送
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QSerialPort>
#include "Thread_1.h"
#include "Thread_2.h"

namespace Ui { //命名空间
  class MainWindow; //一个声明
}

class MainWindow : public QMainWindow //公有继承
{
  Q_OBJECT //还要加上Q_OBJECT宏才能支持信号槽

public: //公有
  explicit MainWindow(QWidget *parent = 0); //主函数
  ~MainWindow();
  QByteArray buff; //叠加数据,qByteArray是最常用的类
  QSerialPort *myCom;

protected: //受保护

private: //私有
  Ui::MainWindow *ui; //指针UI
  QThread *thread_1, *thread_2;
  Thread_1 *worker_1;
  Thread_2 *worker_2;

signals: //信号
  void signalDoing_1(const QString &str);
  void signalDoing_2(const QString &str);

private slots: //公共槽
  void on_clear_data_1_clicked(); //清除1按钮事件
  void on_clear_data_2_clicked(); //清除2按钮事件
  void getdata();
  void on_com_send_clicked(); //串口发送
};

#endif

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • codeaftercode codeaftercode 1月前

    mainwindow.cpp第39、40行:

    myCom->setBaudRate(QSerialPort::Baud115200);//波特率
    myCom->setBaudRate(QSerialPort::Data8);//8位数据
    

    其中第40行你想设置数据位,但是写成设置波特率了
     

    点赞 1 评论 复制链接分享

为你推荐