最近一段时间,需要完成项目中关于Linux下使用串口的一个部分,现在开帖记录过程点滴。

项目的要求是这样的,Qt应用程序主要完成数据采集和发送功能,一开始在google中海搜关键字“Qt串口编程”,得出的结论是:

一、Qt自己的类中没有关于串口的类,不过有人做了一个第三方的类:qextserialport。可以在如下地址下载到:ftp://ftp.trolltech.com/contrib/qextserialport.tar.gz 或者http://qextserialport.sourceforge.net二、关于qextserialport,下载下来的文件中会自带比较详细的HTML文档介绍,不过都是英文哦!而且有版本对应,目前的认识是0.9之后的使用于qt4。

三、以下文章是讲qextserial的编译的,不过好像用处不大。http://www.cnblogs.com/leaway/archive/2008/03/13/1104562.html四、也可以不用这个类,直接调用linux的系统函数。Linux中“万物皆文件”,所以串口也不例外。只要利用open()函数打开设备,用read()和write()函数读写串口,用close()关闭即可。另外,对于串口需要设置一些参数。

五、继续往下搜,一篇号称“Linux下串口编程Bible”的文章《Serial Programming Guide for POSIX Operating Systems》浮出水面,不过照样是英文的。以下网址可以在线阅读或下载。 http://www.easysw.com/~mike/serial/serial.html

http: //digilander.libero.it/robang/rubrica/serial.htmhttp: //digilander.libero.it/robang/rubrica/serial.htm

开始试着在Linux下编译下载的例子。

[root@localhost qextserialport-0.9.0]# ls

Changes qextserialbase.cpp qextserialport.pro

html qextserialbase.h win_qextserialport.cpp

posix_qextserialport.cpp qextserialport.cpp win_qextserialport.h

posix_qextserialport.h qextserialport.h

[root@localhost qextserialport-0.9.0]# vi qextserialport.pro

[root@localhost qextserialport-0.9.0]# qmake -o Makefile qextserialport.pro

[root@localhost qextserialport-0.9.0]# vi makenbsp;

[root@localhost qextserialport-0.9.0]# vi Makefile

[root@localhost qextserialport-0.9.0]# make

g++ -c -pipe -Wall -W -g -D_REENTRANT -fPIC -D_TTY_POSIX_ -DQT_THREAD_SUPPORT -I/usr/local/qt-x11-free-3.3.6/mkspecs/linux-g++ -I. -I/usr/include/freetype2 -I../../include -Imoc/ -o obj/qextserialbase.o qextserialbase.cpp

g++ -c -pipe -Wall -W -g -D_REENTRANT -fPIC -D_TTY_POSIX_ -DQT_THREAD_SUPPORT -I/usr/local/qt-x11-free-3.3.6/mkspecs/linux-g++ -I. -I/usr/include/freetype2 -I../../include -Imoc/ -o obj/qextserialport.o qextserialport.cpp

g++ -c -pipe -Wall -W -g -D_REENTRANT -fPIC -D_TTY_POSIX_ -DQT_THREAD_SUPPORT -I/usr/local/qt-x11-free-3.3.6/mkspecs/linux-g++ -I. -I/usr/include/freetype2 -I../../include -Imoc/ -o obj/posix_qextserialport.o posix_qextserialport.cpp

test -d lib/ || mkdir -p lib/nbsp; rm -f libqextserialport.so.1.0.0 libqextserialport.so libqextserialport.so.1 libqextserialport.so.1.0

g++ -Wl,-rpath,/usr/local/qt-x11-free-3.3.6/lib -shared -Wl,-soname,libqextserialport.so.1 -Wl,-rpath,/usr/local/qt-x11-free-3.3.6/zhf_work/qextserialport-0.9.0/lib -o libqextserialport.so.1.0.0 obj/qextserialbase.o obj/qextserialport.o

obj/posix_qextserialport.o -L/usr/local/qt-x11-free-3.3.6/lib -lqt-mt -lpthread

ln -s libqextserialport.so.1.0.0 libqextserialport.sonbsp;

ln -s libqextserialport.so.1.0.0 libqextserialport.so.1

ln -s libqextserialport.so.1.0.0 libqextserialport.so.1.0

rm -f lib/libqextserialport.so.1.0.0nbsp;

rm -f lib/libqextserialport.so

rm -f lib/libqextserialport.so.1

rm -f lib/libqextserialport.so.1.0

mv -f libqextserialport.so.1.0.0 libqextserialport.so libqextserialport.so.1

libqextserialport.so.1.0 lib/

一下子轻易通过编译,还真的是不敢相信,不过后来发现这个根本没用,因为我需要做到是把这个现成的类添加到我的工程之中,而不是要用它的.o文件。编译通过只说明现在下载的版本是没有语法错误的哈哈。

最近一段时间搞了两天,几近崩溃,好在晚饭前终于曙光降临。我用Posix_qextserialport类实现了串口的写数据,看到数据接收到的一刻,突然感觉所有的事情都不再困难。而之前所有的努力也因为这一刻的到来而充满了意义。

一、做到向串口写数据和读数据,最后做个小界面,完善一下,直观一点。

二、与原有程序结合,实现原来的预想功能。

三、顺便研究调用第三方类和直接使用linux的要求是这样的,Qt应用程序主要完成数据函数两种方式,总结成文。

无论是Win还是Lin ,最近一段时间,都是下载源码包,然后放到源码目录src下,然后,需要完成项目中关于Linux下使用串口qmake make,即可得到对应的库文件。在Win的要求是这样的,Qt应用程序主要完成数据下是qextserialport.dll,qextserialport.prl,libqextserialport.a,需要将第一个复制到Qt安装目录下的,后面两个放在Qt安装目录的lib下。

继续努力。今天定下的两条指导思想:

1、要研究qextserialport的文档,因为它是为Qt编写的类,集成了Qt文档丰富的优点,而且风格是与Qt的其他类是完全类似的。

2、要研究1.1版本的例子,虽然0.9版本没有例子,但是版本的延续是一脉相承的。所以看后续版本的例子也有一些启发。

一个是乱码问题。

原以为昨天解决了大部分问题今天就可以正常接收了,没想到接收到的全是乱码。后来想来想去觉得只有串口的波特率设置是可能造成影响的。可是我的发送端和接收端全是一样是9600啊。无奈,看到梁哥那个串口调试工具是115200,DNW也是,我就把波特率全部设置成了115200。果然可以了,而且另外一个发现是:只能是这一种,设置成其他的,一样都不行,高于115200也不行,真不知道波特率由什么决定的啦。不过通信中真是太重要了,一不匹配就什么也得不到。

第二个问题是:当我传输的文本较大时(其实没有多大,只有2000多bytes),服务器就只能接收到前面一部分了,原来以为它分了多次也应该能够收到,但是就是没有!

我想过了各种可能,并尝试了各种小试验验证,逐一排查。

试验一:利用电脑的串口向DTU发送较长数据,发现接收正常,反过来也是正常的。

这下我认定DTU肯定没有问题,出问题的肯定只有自己发送端的程序了。我查看了qestserialport的源代码,发现里面并没有给发送的大小设置限制。nbsp; 项目

试验二:在发送端采用拆包发送机制,一次发送不超过1024,结果发现现象还是跟原来一样没变化。

最后没办法,把qextserialport的父类,爷爷类,太爷爷类都翻出来看。发现其祖上居然是Qt中的QIODevice,这东西真是太好了,因为QSocket也是其同脉子孙,既然如此,可以用原来程序的思路。这样,我用出了最后一招(GOD,这招要是不管用,我真的没招了!):QString->QTextStream->QIODevice(Qtxtserialport)

哈哈,可以了!

linux实验串行端口程序设计,Linux下串口编程心得(转)相关推荐

  1. Linux 下串口编程(C++ 程序设计)

    串口通信是最简单的通信方式.即使在USB 非常流行的今天,依然保留了串行通信的方式.网络上已经有大量关于Linux下 C++ 串口编程的文章,但是我依然要写这篇博文.因为网络上的资料不是内容太多,就是 ...

  2. Linux下串口编程

    文章目录 串口 驱动 安装 设备文件 测试代码 编译运行 引用 串口 电平之类的就不说了,串口使用的一般包括rs232全双工,rs422四线全双工,rs485两线半双工,rs485四线全双工几种模式, ...

  3. Linux下串口编程(C语言版本)

    Linux 系统下串口编程 1.准备工具 案例选择在Ubuntu下创建虚拟串口,作为收发使用,需要用到socat命令. 首先进行安装,本人已经安装好了,使用安装命令后,所以下面会提示一些信息,记得连网 ...

  4. 【转】MT7688学习笔记(6)——OpenWrt下串口编程

    一.头文件 操作串口需要包含的头文件: #include <stdio.h> /*标准输入输出定义*/ #include <errno.h> /*错误号定义*/ #includ ...

  5. linux实验报告一,Linux实验报告6参考答案.doc

    Linux实验报告6参考答案.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  6. Linux下串口编程基础

    串口知识 串行接口 (SerialInterface) 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用 ...

  7. 【Linux】Linux 下串口编程入门

    目录 串口简介 串口操作 打开串口 设置串口 读写串口 关闭串口 例子 相关主题 串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是 RS-232-C 接口( ...

  8. 串口设置波特率linux函数接口,Linux下串口编程之一:基础设置函数

    1,串口操作需要的头文件 #include /* 标准输入输出定义 */ #include /* 标准函数库定义 */ #include /* Unix 标准函数定义 */ #include #inc ...

  9. linux实验报告makefile,linux实验二交叉编译和Makefile实验报告.doc

    linux实验二交叉编译和Makefile实验报告 实验二 交叉编译和Makefile 实验目的 了解和掌握交叉编译模式和方法: 了解和掌握makefile文件的编写 学会使用交叉编译工具和make工 ...

最新文章

  1. 三调 图斑地类面积_国土三调攻坚冲刺,大疆无人机为调查举证提供加速度
  2. linux mint(Ubuntu、Debian) 18修改环境变量
  3. C++工程中初步使用QML
  4. 【pmcaff专栏】陆蔚青:漫谈商业智能
  5. android 点击跳过,android开发里跳过的坑——button不响应点击事件
  6. dhcp 授权的原理
  7. QwebSocket即时通信
  8. IOS企业应用出现无法验证,需要网络连接以在这台iPad上验证。接入互联网并重试
  9. 帝国cms二次开发留言板自定义字段教程
  10. Java解析多种文件输出字符串以及图片(ppt、odc、odcx、pptx、xls、xlsx、rtf)
  11. pyecharts绘图
  12. 2017年Gartner的数据防泄漏(DLP)魔力象限(Magic Quadrant)
  13. ROS的 sudo rosdep init 的报错终极解决方案
  14. 2021江苏连云港高考成绩查询时间,2021年江苏连云港高考时间:6月7日至9日
  15. 【数据库运维】mysql备份恢复练习
  16. 如何让导航条高亮显示
  17. CSV文件内容乱码处理办法
  18. 实验五 网络编程与安全 20162316 刘诚昊
  19. 乐信季报图解:交易额达562亿 利润4.1亿环比增长59%
  20. SQL Server错误18456,window身份验证登录失败解决办法

热门文章

  1. CLR via C# 3 读书笔记(2):第1章 CLR执行模型 — 1.2 将托管模块组合为程序集
  2. .NET设计模式(5):工厂方法模式(Factory Method)
  3. pandas 读csv 报错 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 0: invalid cont
  4. java神雕侠侣1古墓情缘游戏攻略_《神雕侠侣》古墓派平民玩法攻略
  5. 真给力!蚂蚁金服工程师总结的400道前端面试题提供下载
  6. pyspark subtract代码示例
  7. python django ansible自动化运维管理平台源码收藏
  8. hdfs yarn hbase pid文件被删除解决办法:修改hadoop-daemon.sh yarn-daemon.sh hbase-daemon.sh中PID_DIR存储路径
  9. Linkis源码目录结构详解
  10. linux解决root用户无法ssh localhost的问题