串口简介
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是”数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个 25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。
Linux 操作系统从一开始就对串行口提供了很好的支持,本文简单介绍以下linux下串口调试方法以及如何用shell编程读取串口数据。
串口位置信息
在Linux下,串口的名称一般都为/dev/tty* ,接上串口线之后,我们可以使用:
dmesg | grep tty*
来查找对应的串口,这里使用的是ttyUSB0和ttyUSB1来做测试。
串口调试工具
Linux下提供了一个小巧的串口调试工具,叫做Minicom,可以直接通过sudo apt-get install minicom来进行安装。
安装之后界面如下:
按crtl_A Z可以进行参数设置,包括波特率,校验方式,流控状态等。软件可以通过-D指令直接打开对应串口:sudo minicom -D /tty0
串口与Shell编程
在这之前先介绍一下stty,stty(set tty)命令用于检查和修改当前注册的终端的通信参数。
stty -a 查看当前注册端口的设置情况:
stty -ixon将流控制设置为OFF,而命令
stty ixon则将流控其置为ON。
在stty命令中可以同时设置多个选项:stty ixon 1200
设置波特率为1200 并且设置流控为on
具体更多的参数设置可以使用man指令查看。
下面说下如何通过shell来实现数据的读取,这里主要是使用的cat指令:
cat /dev/ttyUSB0
但在如果执行上面命令,程序会一直停止在读取的界面,如果我们的要求是想读取一段一段的数据,即分批次读取一定之间内的数据,保存并处理,那应该怎么办呢?我们就需要先用stty将模式设置成raw 并且设置最大连接时间:
stty -F /dev/ttyUSB0 raw speed 9600 min 0 time 10
然后我们可以把每次读取到的数据存储到一个临时文件中,然后对其进行处理:
cat /dev/ttyUSB0 >> “tmpFile”
完成的代码如下:
stty -F /dev/ttyUSB0 raw speed 9600 min 0 time 10 while [ 1 -eq 1 ] do cat /dev/ttyUSB0 >> "tmpFile" do something done