`
ydbc
  • 浏览: 721001 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Linux下基于QT串口编程测试二

 
阅读更多

Linux下基于QT串口编程测试二


本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


环境:

主机:Fedora12

开发软件:QT

目标板:MINI6410


实现功能:

目标板接收PC串口传过来的信息并在终端输出,输出是每次读8个字节,然后输出.


说明:

这一次采用的是开源类qextserialbase提供的串口功能,感谢原作者。以下是他的网站:

http://www.yafeilinux.com/


源代码:

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "posix_qextserialport.h"
#include <QTimer>
#include <QDebug>

namespace Ui {
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

    Posix_QextSerialPort *myCom;
    QTimer *readTimer;

private slots:
    void slot_read_com();
};

#endif // WIDGET_H

widget.c:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

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

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

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

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

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

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

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

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

    readTimer = new QTimer(this);
    readTimer->start(100);
    //设置延时为100ms
    connect(readTimer,SIGNAL(timeout()),this,SLOT(slot_read_com()));
    //信号和槽函数关联,延时一段时间,进行读串口操作
}

void Widget::slot_read_com()
{
    char str[10];
    while (myCom->bytesAvailable() > 0)
    {
        qDebug() << "receive" << myCom->bytesAvailable();
        //QByteArray temp = myCom->readAll();
        QByteArray temp;
        int len = myCom->readData(str,8);
        temp.append(str,len);
        qDebug() << "receiver len = " << len << "nei rong:" << temp;
    }
}

Widget::~Widget()
{
    delete ui;
}

注意:本文中读串口采用的是readData()函数,这个函数在qextserialbase中是受保护的虚类,要使用需要把它从posix_qextserialport.h的protected区域移到public区域.


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics