学习使我骄傲 2021-03-05 17:23 采纳率: 100%
浏览 122
已结题

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 2021-03-05 17:35
    关注

    mainwindow.cpp第39、40行:

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月11日
  • 已采纳回答 8月3日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助