linux串口助手开发,linux下QT开发串口通信助手
串口通信的应用十分广泛,所以在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
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
{
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串口助手开发,linux下QT开发串口通信助手相关推荐
- 基于嵌入式linux电子相册设计,用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发...
用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发,包含源代码和编译好的可执行程序 linux_project\album\album.pro .............\.....\al ...
- STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解
STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...
- ARM开发板下Qt实现中文输入法的波折历程
** ARM开发板下Qt实现中文输入法的波折历程 ** 在移植软键盘输入法时候,如果用到中文输入法一定会用到数据库,移植的Qt工程运行时如果碰到如下error,一定要看看我的文章,对你会有所帮助!!! ...
- linux下QT开发串口通信助手
串口通信的应用十分广泛,所以在QT下编写一个串口通信程序就显得尤为重要.下面将一步一步叙述开发过程: 1.下载第三方QT串口类,免积分 http://download.csdn.net/detail/ ...
- linux eclipse下qt开发环境搭建,Qt Eclipse开发环境的部署 上篇
关于Qt Eclipse的开F发,将会从不同的环境中区安装部署,分为上.中.篇,三篇文章来讲.Windows,Linux平台下安装使用eclipse + QT4.4.3开发环境,Windows,Li ...
- linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手
如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...
- 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 ...
- 【Qt】ubuntu下Qt开发环境的搭建
下载对应版本的Qt开发环境 Qt官网下载地址:https://download.qt.io 国内镜像下载地址:https://mirrors.cloud.tencent.com/qt/ .建议用镜像下 ...
- 关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)
关于最近比较火的物联网视频监控项目,在这里给大家分享下图片传输这一块,首先客户端显示是在Windows下Qt中,服务器是在linux系统ubuntu中,服务端打开本地两张图片循环发送给客户端Qt进行显 ...
最新文章
- java微信菜单获取openid_微信二次开发点击菜单openId的获取
- 构建Chua 混沌电路 - 基本测试
- Android中的APinner2
- 使用Intent来启动Activity并传递参数
- 51nod 1258 序列求和 V4
- mysql中使用like模糊查询时如何转义%
- linux shell 豆瓣,用Linux shell脚本爬取豆瓣邮箱
- 车载导航系统中常用物理量和单位
- 如何在苹果Mac更改通知显示的时长?
- 微信开发者工具安装教程
- 【推荐算法】协同过滤算法介绍
- Java经典程序编程50题(较适合初学者)
- 解决SublimeText中文注释乱码
- 车轱辘APP提交到各应用市场的心得~
- tkinter + wxpy 实现微信发送信息 接收消息 并保存聊天记录的功能(GUI)
- 使用zii.widgets.CDetailView显示内容
- 【Druid】(八)Apache Druid 核心插件 Kafka Indexing Service SLS Indexing Service
- 自学java,学多久可以找到工作?
- 一种基于滑动平均的时间序列滤波方法(Java实现)
- bitmap亮度的互转,RBG获取等
热门文章
- 美图进军“社交”领域:主要业务被重新划分为三块
- [昆仑叶哲华]房产的基本术语解读选房不愁
- wincc的画面怎么用博图打开_如何把西门子精智面板画面直接转换成博图WINCC RT ADV画面...
- LayaAir拖拽移动对象并吸附(附源码)
- Unity UGUI 鼠标悬停一段时间显示Text文字
- web学生网页设计作业源码网页设计作业学生网页课程设计作业成品DIV+CSS
- 简单粗暴的美颜滤镜不可取
- 《DFQ》开发随录——资源管理
- 查询数据库中的第10到20条记录
- 苦逼程序员的日常生活