Linux下基于QT串口编程测试二
本文博客链接:http://blog.youkuaiyun.com/jdh99,作者:jdh,转载请注明.
环境:
主机:Fedora12
开发软件:QT
目标板:MINI6410
实现功能:
目标板接收PC串口传过来的信息并在终端输出,输出是每次读8个字节,然后输出.
说明:
这一次采用的是开源类qextserialbase提供的串口功能,感谢原作者。以下是他的网站:
源代码:
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_Hwidget.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区域.