基于QT4的linux串口助手

说明:环境:ubuntu12.04
基于QT4的linux串口助手


近期网上很火的 qt编写串口通信程序全程图文详解
收到了网上的疯狂转载,上面的链接也不确定是不是原创,不过开源的东西不必追究那个原创了。
按照这个教程。调试了几天一直没有结果,最后通过一句一句的分析每天语句终于可以收到数据。
在此将本人遇到的纠结几天的问题写于此。
首先,大致按照以上教程先写出了调试程序:
---------------------------------MainWindow.cpp--------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
#include <QAction>
#include <QSharedMemory>


#include<QTimer>
#include"qextserialport.h"



MainWindow::MainWindow(QWidget *parent) :
      QMainWindow(parent), ui(new Ui::MainWindow)

{
      ui->setupUi(this);//初始化

      mycom=new  Posix_QextSerialPort( "/dev/ttyUSB0" ,QextSerialBase::Polling);//定义串口,传递参数,初始化串口,这句在linux下定义的"/dev/ttyS0"
      mycom->open(QIODevice::ReadWrite);//以读写方式打开串口

      mycom->setBaudRate(BAUD4800);
      mycom->setDataBits(DATA_8);
      mycom->setParity(PAR_NONE);
      mycom->setStopBits(STOP_1);
      mycom->setFlowControl(FLOW_OFF);//设置数据流控制,我们使用无数据流控制的默认设置
//    mycom->setTimeout(500);

    QTimer *readTimer=newQTimer(this);//定时器关联
      //readTimer->setSingleShot(false) ;
          readTimer->start(1);//延时100ms
        // QObject::connect (readTimer,SIGNAL(timeout()),this,SLOT(readMyCom));
          QObject::connect (readTimer,SIGNAL(timeout()), this,SLOT(readMyCom() ) ) ;
    //ui->textBrowser->insertPlainText("ClosingProfiler\n");//显示在文本浏览器中


}

MainWindow::~MainWindow()
{
      deleteui;
}


  void MainWindow::readMyCom()//读串口函数
  {
        QByteArray temp=mycom->readAll();
          //读取变量
    //    QString tmp;
    //    if(ui->checkBox_2->isChecked())//十六进制显示
  ///          tmp =  BgComm::ByteArrayToHexString(temp);
        // else
              //  tmp = QString(temp);
        //ui->textBrowser->insertPlainText(tmp);//显示在文本浏览器中
  //    temp=40;
          //  qWarning("read!");
          // qDebug() << "read:"<<mycom->bytesAvailable()<<"bytes";
            // QByteArray temp = mycom->readAll();
          // temp ="sd";
        ui->textBrowser->insertPlainText(temp);//显示在文本浏览器中
  }





---------------------------------------------------MainWindow.h-----------------------------------------


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include"posix_qextserialport.h"



#include<QTimer>


namespace Ui
{
      classMainWindow;
}

class MainWindow : public QMainWindow
{
      Q_OBJECT

public:
      explicitMainWindow(QWidget *parent =0);//explicit可以有效的防止构造函数的隐式转换带来的错误或者误解
      ~MainWindow();

private:
      Ui::MainWindow *ui;
        Posix_QextSerialPort  *mycom;//声明对象

  QTimer *readTimer;
private slots:
        void readMyCom();//声明读串口槽函数


};

#endif // MAINWINDOW_H
-------------------------------j界面图形截图(调试部分)---------------------------------------------------------------------
基于QT4的linux串口助手

在此本人为了简单起见,只是选择文本浏览器textBrowser显示数据木有发送数据


本人是通过stc89c51通过pl2303,usb转串口与电脑的usb口相链接

波特率为4800,无奇偶校检,8个数据位,无数据流控制,一位停止位,串口名字为ttyUSB0;
关于对串口的名称的查询可以,在插入但单片机的usb线后,在终端输入$dmesg | grep tty*
效果图如:

基于QT4的linux串口助手

当出现提示usb 2-1.1: pl2303 converter now attached to ttyUSB0
表明链接成功,当然也可能是ttyusb1,ttys0,ttys1,等等;
假如还不明白可以参考: 如何查看linux下串口是否可用?串口名称等?ubuntu usb转串口设置
接下来就可以编译代码测试了
在测试之前,最好能用别人写好的串口进行验证,确保电脑可以正确的接受到单片机发来的数据。
在此本人推荐连个串口工具cutecom,安装方法就是在终端输入$sudo apt-get installcutecom,或者直接在unbuntu软件中心输入cutecom进行安装也是不叫方便的。等安装完成后,运行$sudocutecom(注意是小写字母)选择相应的串口即可,打开后会发现,cutecom本地就只是有ttyS0--ttyS3,其实你选择端口选择工具条进行手动输入就好,效果如图


基于QT4的linux串口助手


此外还可一安装minicom,具体可以参见 Linux下minicom的配置和使用方法,配置完成后就可以测试你的程序了。

。。。
等等。还有个问题,假如你是在桌面直接打开cutecom,你会发现明明终端显示串口已经链接但是仍然提示“could not open/dev/ttyusb0”,效果如图: 基于QT4的linux串口助手


      出现这个的原因但是很纳闷。不过进入输入 ls -l  /dev/tty*,或者输入 ls-l  /dev/ttyUSB0,看其属性 基于QT4的linux串口助手



这才发现原来是普通用户木有权限打开串口,输入$sudo chmod 666/dev/ttyUSB0,修改完属性你会就可一打开了。
接下来就可一分析程序了。
读取串口的方式有两种:由于QueryMode,有两种值Polling(查询方式polling,linux支持该模式)和EventDriven(事件驱动方式)win两种模式均识别,具体可以参考一博客 Qt串口编程出错问题解决 
使用polling模式就要参考使用qt的定时器使用QTimer,详细参见 qt中定时器Timer的使用 弄好之后就万事具备,只欠调试。
因为代码比较简单,文本中也有注释,不再说明,只是加入想增加读取频率的话只是修改qextserialbase.cpp文件中的第68行即可,在这里改写时间就是扫描的时间。效果如图 基于QT4的linux串口助手

在这个基础上就可增加新的功能了,本人做的效果如图:
基于QT4的linux串口助手




因还没做进一步测试,等测试完成代码会上传csdn文档下载中,在这里有本人在网上下载的别人写的forwindows的串口代码
到时一起共享。
说明:本人作为初学者。错误之处在所难免。望大家指出。因文化总有各种超链接,直接复制可能会失去超链接。请参考。本人博客http://blog.sina.com.cn/u/2098080273
  邮箱:woshidahuaidan2011@hotmail.com     
  2012 11.17 


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值