Qt简单串口助手

        自己对嵌入式和物联网方向比较感兴趣,参加了一个小比赛使用ht32单片机做一个简单的智能家居demo,就尝试写一个串口助手可以对板子进行调试。

        demo结果:

        将单片机测量到的温湿度打印到串口助手,串口发送1和0控制单片机LED1的亮灭。最后也是基本成功,但是无法识别中文和空格等字符,可以进一步进行优化处理。

        

        实现步骤 

        1.需求分析

        实现基本串口收发功能,需要串口搜索、基本参数的设置等。

        2.UI界面构建

        在qt的ui界面对串口助手进行设计,如下(其实应该使用widget,但是我创建项目时选择了mainwindow,无伤大雅 这里的HEX和ASCALL我用的是radioButton,没有使用group,但是只需要在初始化时进行一个默认选择即可。):

        

        3. 代码实现

        这里因为需要使用串口,所以需要在过程文件中加入串口需要的serialport

        

        串口搜索即获取所有的可用串口:

//获取列表
QStringList MainWindow::getPortNameList()
 {
    QStringList serialPortName;
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) //查找所有的允许使用的串口
    {
       m_serialPortName << info.portName(); //将查找到的放入LIST
       qDebug() <<info.portName();
    }
    ui->comboBox->addItems(m_serialPortName);//添加到显示界面

    return  serialPortName;
 }

        打开串口按钮功能:这里点击打开按钮,便会根据上面选择的参数进行相应的处理,对串口进行设置,同时里面绑定了两个槽函数,读取串口的信息以及显示的跟新。

void MainWindow::on_open_port_clicked()
{
        m_serialPort = new QSerialPort();//实例化串口类一个对象

        if(m_serialPort->isOpen())//如果串口已经打开了 先给他关闭了
        {
            m_serialPort->clear();
            m_serialPort->close();
        }

        //设置串口名字 假设我们上面已经成功获取到了 并且使用第一个
        m_serialPort->setPortName(ui->comboBox->currentText());

        if(!m_serialPort->open(QIODevice::ReadWrite))//用ReadWrite 的模式尝试打开串口 读写
        {
            qDebug()<<ui->comboBox->currentText() << " 打开失败!";
            return;
        }
        //打开成功

        //设置波特率 只做了两个最常用的
        if(ui->comboBox_2->currentText() == tr("9600"))//根据组合框内容对串口进行设置
           m_serialPort->setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);//设置波特率和读写方向
        else if(ui->comboBox_2->currentText() == tr("115200"))
           m_serialPort->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);//设置波特率和读写方向

        //设置数据位
        if(ui->comboBox_3->currentText() == tr("8"))
           m_serialPort->setDataBits(QSerialPort::Data8);		//数据位为8位
        else if(ui->comboBox_3->currentText() == tr("7"))
           m_serialPort->setDataBits(QSerialPort::Data7);		//数据位为8位

        //设置奇偶校验
        if(ui->comboBox_4->currentText() == tr("无"))
            m_serialPort->setParity(QSerialPort::NoParity);	//无校验位
        else if(ui->comboBox_5->currentText() == tr("奇校验"))
            m_serialPort->setParity(QSerialPort::OddParity);	//奇校验位
        else if(ui->comboBox_5->currentText() == tr("偶校验"))
            m_serialPort->setParity(QSerialPort::EvenParity);	//偶校验位


        //设置停止位
        if(ui->comboBox_5->currentText() == tr("1"))
           m_serialPort->setStopBits(QSerialPort::OneStop); //一位停止位
        else if(ui->comboBox_5->currentText() == tr("2"))
           m_serialPort->setStopBits(QSerialPort::TwoStop); //两位停止位

        m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//无流控制


        //连接信号槽 当下位机发送数据QSerialPortInfo 会发送个 readyRead 信号,我们定义个槽readMycom()
            connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(readMycom()));
            //值改变
            connect(ui->receiveText,SIGNAL(textChanged()),this,SLOT(autoScroll()));

            ui->open_port->setEnabled(false); //打开串口后“打开串口”按钮不可用

            ui->close_port->setEnabled(true); //打开串口后“关闭串口”按钮可用

            ui->btn_send->setEnabled(true); //打开串口后“发送数据”按钮可用

             ui->btn_clc1->setEnabled(true);//清空按钮
              ui->btn_clc2->setEnabled(true);//清空按钮

            ui->comboBox_2->setEnabled(false); //设置combox不可用
            ui->comboBox_3->setEnabled(false);
            ui->comboBox_4->setEnabled(false);
            ui->comboBox_5->setEnabled(false);
            ui->comboBox->setEnabled(false);
}

界面刷新

//自动刷新界面显示信息,向下面滚动
void MainWindow::autoScroll()
{
    QTextCursor cursor  = ui->receiveText->textCursor();
    cursor.movePosition(QTextCursor::End);
    ui->receiveText->setTextCursor(cursor);
}

读取串口:这里的两种模式是网上比较通用的两种,于是在这里进行了判断,这段函数是后面进行完善的。

void MainWindow::readMycom(void) //读串口函数
{
 QBAtemp = m_serialPort->readAll();
 Qstrtemp.clear();
 qDebug() <<"read mycom";
 for(int j = 0 ; j < QBAtemp.length();j++)
      Qstrtemp += QBAtemp[j];

 if(recvmodel == ASCII)//ASCII码 其实是string类型
 {
      ui->receiveText->moveCursor(QTextCursor::End);
      ui->receiveText->insertPlainText(Qstrtemp);
      //ui->textBrowser->append(Qstrtemp);
      qDebug() << "ASCII :" << Qstrtemp;
 }
 else
 {
      ui->receiveText->append(StringtoHex(Qstrtemp));
      qDebug() << "HEX :" << StringtoHex(QString(Qstrtemp));
 }

 qDebug() << Qstrtemp << ":" << Qstrtemp.length();
}

 到这一步其实已经可以接收单片机传递过来的信息了,默认的string类型可以直接显示

关闭串口

void MainWindow::on_close_port_clicked()
{
    m_serialPort->close();

    ui->open_port->setEnabled(true); //打开串口后“打开串口”按钮不可用

    ui->close_port->setEnabled(false); //打开串口后“关闭串口”按钮不可用

    ui->btn_send->setEnabled(false); //打开串口后“发送数据”按钮不可用

    ui->btn_clc1->setEnabled(false);

    ui->comboBox_2->setEnabled(true); //设置combox可用
    ui->comboBox_3->setEnabled(true);
    ui->comboBox_4->setEnabled(true);
    ui->comboBox_5->setEnabled(true);
    ui->comboBox->setEnabled(true);
}

ASCALL 转 HEX :勾选之后再进行处理即可

QString MainWindow::StringtoHex(QString buf)
{
  QString sret;
  QByteArray Qba = buf.toLatin1();
  QDataStream out(&Qba,QIODevice::ReadWrite);

  while(!out.atEnd())
  {
      qint8 outchar = 0;
      out >> outchar;

      QString str = QString("%1").arg(outchar & 0xFF,2,16,QLatin1Char('0')).toUpper() + QString(" ");

      sret += str;
  }

   return sret;
}

HEX 转 ASCALL 勾选之后再进行处理即可

QString MainWindow::HextoString(QString buf)
{
    QByteArray ret;
    QString    Qstr;
    bool ok;
    buf = buf.trimmed();
    buf = buf.simplified();

    QStringList sl = buf.split(" ");

    foreach(QString s,sl)
    {
        if(!s.isEmpty())
        {
            char c = s.toInt(&ok,16) & 0xFF;
            if(ok){
                ret.append(c);
            }
            else
            {
                qDebug() << "非法字符";
            }

        }

    }

    for(int i = 0 ; i < ret.length();i++)
         Qstr += ret[i];

    return Qstr;

}

发送功能:调用write函数即可,这里判断是否选择换行

void MainWindow::on_btn_send_clicked()
{
    if(sendmodel == ASCII)
    {
        if(ui->checkBox->checkState() == Qt::Checked)
        {
            Qstrtemp = ui->sendText->text() + "\r\n";
        }
        else
           Qstrtemp = ui->sendText->text();

       m_serialPort->write(Qstrtemp.toLatin1(),Qstrtemp.length());
    }
    else
    {
        if(ui->checkBox->checkState() == Qt::Checked)
        {
            Qstrtemp = ui->sendText->text() + "0D 0A";
        }
        else
            Qstrtemp = ui->sendText->text();

        qDebug() <<"666" +Qstrtemp;
       qDebug() <<"666" +HextoString(Qstrtemp);
       m_serialPort->write(HextoString(Qstrtemp).toLatin1(),HextoString(Qstrtemp).length());
    }
}

清除功能:简单,直接把界面清空即可

至此,串口助手设计结束

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片机多功能调试助手分两个版本,分别是:含CH375 DLL版本、无DLL版本,它们的区别主要体现在是否对CH37X USB提供支持。为了减少对服务器的负担,现在单片机多功能调试助手只提供无DLL的版本,即不对CH372/CH375 USB芯片提供支持,只支持HID USB设备!含有DLL版本的暂只提供给购买开发板的买家! 在此感谢网络上众多的朋友的反馈与建议,没有他们的支持就没有该软件的茁壮成长!本人会继续努力进行更新,为大家提供一个功能完善与稳定的调试工具,为大家节省不必要的时间。 本软件的使用手册可到www.smartmcu.com进行下载! 作者: 温子祺 联系方式:wenziqi@hotmail.com或wenziqi@gmail.com 博客: http://www.cnblogs.com/wenziqi 淘宝: http://shop61791934.taobao.com/ 官网: www.smartmcu.com 注:软件版权归作者所有,未经作者允许,禁止用于商业用途,违者必究! ===================================================== 2015-12-12 (1)内嵌了蓝牙调试助手功能。 ===================================================== 2015-12-8 (1)在Win7以上系统执行更稳定,默认支持管理员运行。 ===================================================== 2013-07-23 (1)增强稳定性 ===================================================== 2012-05-21 (1)优化了Ping和TCP连接过程 (2)开放了检验源码 ===================================================== 2012-02-06 (1)发送区域支持保存发送数据256字节 ===================================================== 2011-10-17 (1)帧换行功能可调 ===================================================== 2011-07-10 (1)串口、USB、网咯接收数据时能够自动对\n和\r\n进行识别 注意:Windows默认对'\r\n'进行换行的 Linux 默认对‘\n’进行换行的 ===================================================== 2011-07-26 (1)修正了PING会出现大延时的问题 (2)修正了网络调试发送计数错误的BUG ===================================================== 2011-07-24 (1)数据校验修正和添加了部分功能 (2)服务器支持多项发送 ===================================================== 2011-07-10 (1)串口、USB、网络接收数据时能够自动对\n和\r\n进行识别 注意:Windows默认对'\r\n'进行换行的 Linux 默认对‘\n’进行换行的 ===================================================== 2011-05-05 (1)串口调试添加Modem模式 ===================================================== 2011-04-25 (1)修正Ping过慢的BUG ===================================================== 2011-04-20 (1)在接收区添加了右键菜单(清空、显示控制、文本输出控制) ===================================================== 2011-04-13 (1)修正串口调试隐藏BUG (2)提升了界面启动的速度 ===================================================== 2011-04-07 (1)发送数据支持回车换行 (2)修正了C51代码向导的BUG ===================================================== 2011-03-31 (1)修改了清空发送和清空接收的BUG ===================================================== 2011-03-24 (1)修改了下载功能 (2)修正了HexToText 和 HexToBin ===================================================== 2011-03-03 (1)在C51代码向导当中增加了计算软件延时的功能 (2)修正了通信端口监视不正常的BUG (3)解决了回车键会退出界面的BUG ===================================================== 2011-02-28 (1)在串口、USB、网络接收数据的过程中,能够正确显示当前接收数据的速度 (2)在C51代码向导当中增加了输出为Keil工程的功能,方便编译 ===================================================== 2011-02-25 (1)增加了双击文本框可以保存数据记录的功能 (2)增加了Hex/Bin文件输出文本的功能 ===================================================== 2011-02-20 (1)修正了在连续发送的逻辑BUG (2)修正了串口监视关闭时发生内存错误的BUG ===================================================== 2011-02-13 (1)修正了在无USB HID设备的情况下还能够打开USB设备的BUG ===================================================== 2011-02-11 (1)修正了界面风格,防止在不同的系统显示不一致! ===================================================== 2011-02-07 (1)修复了部分BUG,如串口高级监视、代码生成等。 (2)编码转换增强、调试工具增强(支持帧换行,方便分析数据)! (3)USB支持自动寻找设备! ===================================================== 2011-01-31 (1)添加了串口高级监视功能,能够监视其他应用程序的串口通信。 (2)添加了8051单片机代码生成功能。(懒人的必备O(∩_∩)O哈哈~) ===================================================== 2011-01-15 (1)修正了发送大量数据出错的BUG ===================================================== 2011-01-13 (1)修正了串口、USB、网络监视的BUG ===================================================== 2011-01-08 (1)新增加COM、USB、NET多项发送功能,更加利于调试! ===================================================== 2011-01-02 (1)调整了界面,让其显示更加多的数据! ===================================================== 2010-12-28 (1)修正Hex接收会出错的BUG ===================================================== 2010-12-21 (1)完美支持中文字数据收发 ===================================================== 2010-12-14 (1)修正COM、USB、NET、SERVER接收数据时会出现乱码的BUG (2)优化了线程接收数据的策略 ===================================================== 2010-12-10 (1)支持USB、网络接口监视 (2)优化了自动升级策略 (3)增强了位图输出16进制数功能(支持单色图、16位图、24位图) (4)具有自动保存参数功能 ===================================================== 2010-12-02 (1)修正了串口检测、接收策略, (2)添加了串口监视功能 (3)添加了BCC校验 (4)增强字模制作功能(支持特殊字符、英文、汉字等) ===================================================== 2010-11-29 (1)添加了记录发送、接收字节数的统计功能 (2)添加了自动检测新版本的功能 ===================================================== 2010-11-25 (1)添加了连续发送的功能 (2)添加了在线下载新版本的功能 (3)完善服务器功能 (4)完善了字模输出(摆脱外接字符文件) (5)完善了位图转16进制文件功能,可保存为C文件 ===================================================== 2010-11-02 (1)添加了服务器功能,网络调试更方便! (2)界面更加宽阔,显示更多的信息! ===================================================== 2010-09-26 (1)修正了单片机功能助手运行时间长导致的假死问题。(多谢网友提供宝贵的意见) ===================================================== 2010-09-01 (1)修正了串口类,提升接收数据的效率。 ===================================================== 2010-08-03 (1)在检验值计算支持TCP/IP校验和计算 (2)在NET调试新增加了Ping功能 ===================================================== 2010-07-28 (1)修正CRC计算错误 ===================================================== 2010-07-15 (1)修正打开关闭串口,接收数据文本框数据丢失 (2)串口对话框更为简洁
### 回答1: Qt5串口助手是一款基于Qt5开发的串口通讯工具,用来帮助用户进行串口通讯的测试和调试工作。其中"<<115200"表示设置串口的波特率为115200。 串口通讯是一种用来实现数据传输的通信方式,常用于嵌入式开发和设备间的通讯。Qt5串口助手提供了简单易用的图形界面,用户可以通过该工具直接进行串口的打开、关闭、配置等操作。在进行配置时,用户可以选择要使用的串口号和波特率。 在这里,"<<115200"表示设置波特率为115200,波特率是串口通信传输速率的度量单位,它表示每秒钟可以传输的位数。115200是一个较高的波特率,可以实现数据传输速度快的特点。对于某些特殊的设备或要求,使用较高的波特率能够满足更快的数据传输需求。 总的来说,Qt5串口助手提供了方便的界面和功能,用户可以根据具体需求进行串口通讯的设置和调试工作。通过设置波特率为115200,可以实现较快的数据传输速度,满足一些高速通讯的需求。使用该工具可以提升开发效率和调试准确性,方便开发人员进行串口通讯相关的工作。 ### 回答2: qt5串口助手是一个使用Qt5编写的串口通信工具,用于与设备进行串口通信和数据传输。在这里,"<<115200"是串口的波特率设置,表示波特率为115200。波特率是指在串行通信中,每秒钟传输的位数,波特率越高,数据传输速率越快。 qt5串口助手通过使用Qt的串口模块,可以方便地打开和关闭串口,读取和发送数据。用户可以通过图形界面选择并设置串口的参数,包括波特率、数据位、停止位和校验位等等。 当波特率设置为115200时,串口助手会以每秒传输115200位的速度与设备进行通信,这样可以实现较快的数据传输。对于一些需要高速传输数据的应用场景,选择较高的波特率可以提高通信效率。 需要注意的是,通信双方的波特率设置要保持一致,否则可能会导致通信的错误或数据丢失。因此,在使用qt5串口助手进行串口通信时,需要确保设备端的波特率与程序端设置的波特率一致,这样才能正常进行数据的传输和交互。 总而言之,qt5串口助手能够方便地进行串口通信和数据传输,而"<<115200"表示设置波特率为115200,通过此设置可以实现较高的数据传输速率。 ### 回答3: Qt5串口助手是一款使用Qt5框架开发的串口通信工具。串口通信是一种常见的数据传输方式,可以实现计算机与其他设备间的数据交互。<<115200表示串口通信中的波特率(baud rate),即每秒传输的位数。115200是一种常用的波特率,表示每秒传输115200位的数据。 通过Qt5串口助手,我们可以方便地进行串口的连接和数据的收发。首先,我们需要选择正确的串口号以及波特率。然后,通过打开串口,我们可以与设备建立起连接。连接成功后,我们可以发送指令或数据到设备,并且实时接收设备返回的数据。 Qt5串口助手提供了一些常用的功能,比如发送数据、接收数据以及显示接收到的数据等。用户可以通过界面上的按钮或者命令来实现这些功能。同时,Qt5串口助手还可以设置串口的其他参数,比如数据位、校验位、停止位等。这些参数的设置依赖于具体的设备和通信需求,可以根据需要进行调整。 总之,Qt5串口助手是一款方便实用的串口通信工具,可以帮助我们实现与设备间的数据传输。通过设置正确的串口号和波特率,以及合适的参数配置,我们可以快速、稳定地进行串口通信,并且实时地监控和处理设备返回的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值