Linux下基于QT串口编程测试二
本文博客链接:http://blog.csdn.net/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_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区域.