linux下QT开发串口通信助手
来源:互联网 发布:韩国视频软件 编辑:程序博客网 时间:2024/03/28 19:09
串口通信的应用十分广泛,所以在QT下编写一个串口通信程序就显得尤为重要。下面将一步一步叙述开发过程:
1.下载第三方QT串口类,免积分
http://download.csdn.net/detail/cmh477660693/9726584
2、首先来看一下串口通信几个关键文件:
posix_qextserialport.cpp和posix_qextserialport.h文件定义了一个Posix_QextSerialPort类;
qextserialbase.cpp和qextserialbase.h文件定义了一个QextSerialBase类 ;
3、读取串口方式:Polling(查询方式)和EventDriven(事件驱动方式)
此两种方式在QextSerialBase类的一个枚举变量QueryMode中定义了。
事件驱动方式:使用事件处理串口的读取,一旦有数据到来,就会发出readyRead()信号,在事件驱动、的方式下,串口的读写是异步的,调用读写函数会立即返回,它们不会冻结调用线程。
查询方式:读写函数是同步执行的,信号不能工作在这种模式下,而且有些功能也无法实现。需要建立定时器来读取串口的数据。
注意:在Windows下支持以上两种模式,而在Linux下只支持Polling模式。
4、总结一下:
我们在Qt中使用这个类编写串口程序,根据平台的不同只需要分别使用四个文件。在Linux下是:
qextserialbase.cpp和qextserialbase.h 以及posix_qextserialport.cpp和posix_qextserialport.h
在Linux下我们只能使用查询Polling方式。
5.工程命名为myCom,Base Class选择mainwindow。
然后将有关Linux下串口配置文件(cpp和h文件)添加到工程里面去:
ui界面如图
,并给Push_Button右键添加点击信号。
6.在miniwindow.h添加头文件和声明私有槽函数
#include”posix_qextserialport.h”
private slots:
void readMyCom();
void on_pushButton_clicked();
在minwindows.cpp添加
#include "mainwindow.h"#include "ui_mainwindow.h"#include "qextserialbase.h"#include<QTimer>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ QTimer *readtimer = new QTimer(this); readtimer->start(100); ui->setupUi(this); struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500}; //定义一个结构体,用来存放串口各个参数 myCom = new Posix_QextSerialPort("/dev/ttyUSB0",myComSetting,QextSerialBase::Polling); myCom ->open(QIODevice::ReadWrite);//以可读写方式打开串口 myCom->setTimeout(100);//设置时间间隔 connect(readtimer,SIGNAL(timeout()),this,SLOT(readMyCom()));//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作 }MainWindow::~MainWindow(){ delete ui;}void MainWindow::readMyCom() //读串口函数{QByteArray temp = myCom->readAll();//读取串口缓冲区的所有数据给临时变量tempui->textBrowser->insertPlainText(temp);//将串口的数据显示在窗口的文本浏览器中}static char ConvertHexChar(char ch){ if((ch >= '0') && (ch <= '9')) return ch-0x30; else if((ch >= 'A') && (ch <= 'F')) return ch-'A'+10; else if((ch >= 'a') && (ch <= 'f')) return ch-'a'+10; else return (-1);}static QByteArray QString2Hex(QString str) { QByteArray senddata; int hexdata,lowhexdata; int hexdatalen = 0; int len = str.length(); senddata.resize(len/2); char lstr,hstr; for(int i=0; i<len; ) { hstr=str[i].toLatin1(); if(hstr == ' ') { i++; continue; } i++; if(i >= len) break; lstr = str[i].toLatin1(); hexdata = ConvertHexChar(hstr); lowhexdata = ConvertHexChar(lstr); if((hexdata == 16) || (lowhexdata == 16)) break; else hexdata = hexdata*16+lowhexdata; i++; senddata[hexdatalen] = (char)hexdata; hexdatalen++; } senddata.resize(hexdatalen); return senddata; }void MainWindow::on_pushButton_clicked(){ //myCom->write(ui->lineEdit->text().toLatin1().data()); //以ASCII码形式将数据写入串口 QByteArray senddata = QString2Hex(ui->lineEdit->text()); //转换为16进制 myCom->write(senddata);}
- linux下QT开发串口通信助手
- Qt串口助手开发
- LINUX下串口通信开发
- linux下Qt串口通信小结
- 转《linux 下串口通信开发》
- Linux下基于QT的串口通信程序(Tiny6410)
- Linux下基于QT的串口通信程序(Tiny6410)
- Linux下串口通信
- linux 下串口通信
- linux下串口通信
- linux 下串口通信
- linux 下串口通信
- Linux下串口通信
- C#串口通信助手
- Linux虚拟串口 及 Qt串口通信
- Linux虚拟串口 及 Qt串口通信
- qt串口调试助手
- linux下安装串口调试助手
- FileZilla Sever软件在局域网内共享文件
- jQuery.getJSON与PHP 实现跨网站提交数据
- Set-based Similarity Search for Time Series
- crontab 命令详情
- c#的sealed修饰符
- linux下QT开发串口通信助手
- android-实例-开发模板
- redis3.2新功能--GEO地理位置命令介绍
- 自学JAVA[DAY004]--JAVA流程控制
- 异常处理文件的写出操作
- sizeof("string") 以及字符数组使用字符串初始化
- SQL优化指导(STA)与SQL访问指导(SAA)
- LeetCode 477. Total Hamming Distance
- Swift Playground精讲