本文共 1978 字,大约阅读时间需要 6 分钟。
Linux下基于QT串口编程测试二
本文博客链接:,作者:jdh,转载请注明.
环境:
主机:Fedora12
开发软件:QT
目标板:MINI6410
实现功能:
目标板接收PC串口传过来的信息并在终端输出,输出是每次读8个字节,然后输出.
说明:
这一次采用的是开源类qextserialbase提供的串口功能,感谢原作者。以下是他的网站:
源代码:
widget.h:
#ifndef WIDGET_H#define WIDGET_H#includewidget.c:#include "posix_qextserialport.h"#include #include namespace Ui { class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();private: Ui::Widget *ui; Posix_QextSerialPort *myCom; QTimer *readTimer;private slots: void slot_read_com();};#endif // WIDGET_H
#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区域.
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!