Ubuntu下QT4串口通信学习笔记

想做个Ubuntu下的串口通信软件,先粗略的学习了下QT(临时抱佛脚-w-)

下面是串口通信相关的:

一些相关的资料:

Serial Programming Guide for POSIX Operating Systems  

http://www.easysw.com/~mike/serial/serial.html#config

QextSerialPort Class Reference

http://qextserialport.sourceforge.net/qextserialport-1.0.x/classQextSerialPort.html

一、基础知识

Linux下串口编程涉及到的文件

  qextserialbase.cpp

  qextserialbase.h

  posix_qextserialport.cpp

  posix_qextserialport.h

  在QextSerialBase类中涉及到了一个枚举变量QueryMode,它有两个值Polling和EventDriven 。QueryMode指的是读取串口的方式,下面我们称为查询模式,我们将Polling称为查询方式Polling,将EventDriven称为事件驱动方式。

  Linux下只支持Polling方式,该方式需要我们自己设置定时器,来不断地读取缓冲区的数据

二、使用查询方式Polling来实现串口通信

1.在widget.h中声明一个定时器对象

  添加头文件包含:#include <QTimer>

  添加private变量:QTimer *readTimer

2.在widget.cpp文件中的构造函数中更改

(1)串口定义:

  myCom = new Posix_QextSerialPort(“/dev/ttyUSB0”,QextSerialBase::Polling);//定义串口对象,指定串口名和查询模式,这里使用Polling

  注意这里使用ttyUSB0,是因为我用的笔记本,通常用的是USB转串口

  myCom ->open(QIODevice::ReadWrite);    //以读写方式打开串口   

  myCom->setBaudRate(BAUD9600);    //波特率设置,我们设置为9600

  myCom->setDataBits(DATA_8);    //数据位设置,我们设置为8位数据位   

  myCom->setParity(PAR_NONE);    //奇偶校验设置,我们设置为无校验   

  myCom->setStopBits(STOP_1);    //停止位设置,我们设置为1位停止位   

  myCom->setFlowControl(FLOW_OFF);    //数据流控制设置,我们设置为无数据流控制   

  myCom->setTimeout(10);    //延时设置,我们设置为延时10ms

  注意这里的时间指的是每隔10ms将读一次串口,将串口中的数据读取到串口缓冲区,在Polling模式下,它影响读取时间

  实现槽函数:

  void Widget::readMyCom() //读取串口数据并显示出来

  {

    QByteArray temp = myCom->readAll();    //读取串口缓冲区的所有数据给临时变量temp   

    ui->textBrowser->insertPlainText(temp);    //将串口的数据显示在窗口的文本浏览器中

  }

  void Widget::on_pushButton_clicked()  //发送数据

  {   

     myCom->write(ui->lineEdit->text().toAscii());    //以ASCII码形式将数据写入串口

  }

(2)定义定时器,定义关联

  readTimer = new QTimer(this);   

  readTimer->start(100);    //设置延时为100ms   

  connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()));//信号和槽函数关联,延时一段时间,进行读串口操作

  注意这里是每隔100ms读取的是串口缓冲区,而不是串口本身

还有关于数据发送和数据接收的若干问题~~


posted @ 2011-04-06 22:17  crpig  阅读(650)  评论(0)    收藏  举报