串口通信的应用十分广泛,所以在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();//读取串口缓冲区的所有数据给临时变量temp
ui->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;elsehexdata = 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开发串口通信助手相关推荐

  1. linux串口助手开发,linux下QT开发串口通信助手

    串口通信的应用十分广泛,所以在QT下编写一个串口通信程序就显得尤为重要.下面将一步一步叙述开发过程: 1.下载第三方QT串口类,免积分 http://download.csdn.net/detail/ ...

  2. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  3. QT的串口通信助手C++代码开源

    QT的串口通信助手C++代码开源 Qt是一种基于C++的跨平台图形用户界面应用程序开发框架 本次使用QT的版本是5.6 需要在pro文件里面添加 QT += serialport 添加库文件 布局界面 ...

  4. 基于linux和qt的串口通信调试器调的设计及应用,基于linux和Qt的串口通信调试器调的设计及应用...

    Q:墼 S ic n Tcnl yI oai ea c nead eho g nvt n rd e o n oH l T技术 基于 I x和 Ot iu n的串口通信调试器调的设计及应用 盂繁磊穆丽红 ...

  5. linux系统中如何安装qwt,linux下Qt开发环境中qwt库的安装与使用

    qwt的安装与使用 安装好qt开发环境后,先去下载qwt库源代码. 以我下载的qwt-6.0.1.zip为例,解压得到qwt-6.0.1. 1.安装qwt-6.0.1 执行下面的命令:1 cd qwt ...

  6. Linux下c语言串口调试助手,World Hello

    调试是每个程序员都会面临的问题. 如何提高程序员的调试效率, 更好更快地定位程序中的问题从而加快程序开发的进度, 是大家共同面对的问题. 可能Windows用户顺口就会说出:用VC呗 :-) , 它提 ...

  7. Qt开发串口通信以及坐标显示程序并移植

    一. 项目介绍 项目介绍:通过串口从数据采集板传输数据到终端板上面,自行设计一个界面用来显示收集到的数据,以及画出所对应的坐标点.终端显示界面的板子是基于S3C6410芯片的,板子是师兄根据Mini6 ...

  8. Qt实现串口通信(C++实现串口通信小助手)---串口收发及串口数据解码、串口通信模拟器。

    Qt实现串口通信示例 前言:以下串口通信示例,参考了现有网上前辈们的资源,最后结合部分个人的思想,所以下述博客会将实现的原理及代码的案例进行公开. 这里我们先上效果图: 一.串口通信简介 串口通信是上 ...

  9. Linux下c开发 之 线程通信

    Linux下c开发 之 线程通信 1.Linux"线程" 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种"多进程单线 ...

最新文章

  1. R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器)、在编辑器中输出需要的数据生成最终的dataframe
  2. Python使用SQLAlchemy连接数据库并创建数据表、插入数据、删除数据、更新表、查询表(CRUD)
  3. Android --- 数据库存储的是正确的时间格式(2021-06-17 21:47:23)但是在获取的时候变成了(2021-06-17T13:47:23.000+00:00)
  4. 一起talk C栗子吧(第一百二十三回:C语言实例--显示变量和函数的地址)
  5. powerbi实时刷新mysql数据库_PowerBI开发 第七篇:数据集和数据刷新
  6. Windows 7如何禁止在C盘上安装软件?
  7. 【JNI知识一】--JNI接口函数与指针
  8. C++---map/multimap用法介绍
  9. Mac OS Virtualbox 倒入 ova 镜像文件
  10. Phpcms V9 栏目列表调用文章点击量及评论数量方法(转)
  11. MFC中CDC画线总结
  12. QT 加载周立功CAN卡库
  13. 二广高速公路4标段道路设计--武汉理工大学本科生毕业设计
  14. 图画日记怎么画_一年级数学图画日记
  15. linux/unix交互shell使用scanf函数获取键盘输入时按Backspace键总是出现^H^H^H^的解决方法
  16. 老台式计算机怎么调亮度,老台式电脑亮度怎么调
  17. TF内存卡(SDHC)的传输规范
  18. java文件后缀_java源文件名的后缀是什么?
  19. 82.android 简单的当前运行内存清理
  20. YUV和RGB的区别(以及YUV444 YUV422 YUV411 YUV420的介绍)

热门文章

  1. 3d打印机出现层纹(z轴对不齐)常见解决办法
  2. J2EE基础:集合框架—List
  3. SQLite数据库数据类型详解
  4. 如何提升树莓派的操作流畅度和视频播放流畅度?
  5. (3)理解neutron ml2---subnet创建流程源码解析
  6. 被通知一个月离职,我修改了项目中的所有注释……
  7. ABT 钱包 2.3 版更新发布
  8. Levenberg–Marquardt算法
  9. 备战双11 蚂蚁金服10k规模k8s集群管理设计分享笔记
  10. SDM(空分复用)FDM(频分多路复用)TDM(时分多路复用)WDM(波分多路复用)...