在Linux中如何使用命令进行RS-232串口通信和数据包解析
Posted HarleyGwak
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux中如何使用命令进行RS-232串口通信和数据包解析相关的知识,希望对你有一定的参考价值。
文章首发于浩瀚先森博客
1. 获取串口号
在Linux系统中一切皆为文件,所以串口端口号也不例外,都是以设备文件的形式出现。也就是说我们可以用访问文本文件的命令来访问它们。
a. 一般串口都是以/dev/ttyS#的格式显示,所以第一个连接的串口就是/dev/ttyS0,第二个连接的串口就是/dev/ttyS1…以此类推。
b. USB转串口适配,没有额外驱动,它们会显示为/dev/ttyUSB#,如/dev/ttyUSB0
2. 配置串口属性
我们可以使用stty命令来更改配置串口属性(详情查看”man sty”),比如我们设置串口/dev/ttyS0波特率为57600和odd parity,命令如下
stty -F /dev/ttyS0 57600 parodd
3. 串口数据读写操作
使用echo向串口发送数据,如
echo "command" > /dev/ttyUSB0
可以使用cat来读取串口中的数据,如
cat /dev/ttyUSB0
读取数据并保存到txt文本文件中,如
cat /dev/ttyUSB0 > file.txt
4. 解析数据
说到解析数据,我们可以使用一个强大的文本分析工具awk,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
详细说明请参考http://www.gnu.org/software/gawk/manual/gawk.pdf
下面使用gawk举个栗子,在终端以H:M:S格式输出当前时间和来自串口的每一行前3个字符,命令如下:
cat /dev/ttyUSB0 | gawk ’{print strftime("%T"), substr($1 ,1,3)}’
5. 后台运行
可以讲串口数据读写操作设置为后台进行,通过一个简单命令或者shell 脚本就可以实现。命令可以用nohup。即使关闭终端或者注销账户,进程还是在进行着,比如
nohup cat /dev/ttyS0 | gawk ’{substr($1 ,1,3)}’ > result.txt
使用下面命令可以删除进程,但是会删除所有的cat进程。
killall cat
我们可以用“ps ax”来查看当前运行的进程,选择你要删除的,记下PID,删除即可,如下
kill -9 PID
6. 绘制数据
如果你希望绘制实时获取到的数据,我这里推荐一个软件叫做KST(http://kst.kde.org/),它能够实时的获取text文件数据并绘制出来,可以浏览官网查看详细说明。
以上是关于在Linux中如何使用命令进行RS-232串口通信和数据包解析的主要内容,如果未能解决你的问题,请参考以下文章
如何在 RS232 串口和本地笔记本电脑之间获取命令历史记录?
准备用PIC 3.3V的单片机通过串口与电脑通信,采用RS232芯片进行转换,请问:1〉RS232的供电是5V吧!
Linux——Linux驱动之iMX6ULL平台下串口UART驱动实现RS232数据通信开发实战(UART驱动框架源码分析串口应用程序编写)
Linux——Linux驱动之iMX6ULL平台下串口UART驱动实现RS232数据通信开发实战(UART驱动框架源码分析串口应用程序编写)