基于Linux操作系统下串口调试助手的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Linux操作系统下串口调试助手的设计
黎爱琼;陈家林;谈宏华
【摘要】为了方便在Linux操作系统下进行串口调试以及能在嵌入式系统开发板上直观地观察到串行数据传输,在Redhad 9.0下的Qt Designer编程环境下设计了串口调试助手.首先在Qt下以一种图形化的编程方式完成串口调试助手界面的设计,再将其生成源代码,然后在源代码中添加串口驱动,完成串口调试助手的设计.经实践证明,该串口调试助手在Redhad 9.0操作系统上运行良好.利用交叉编译程序将其移植到S3C2410的Linux 2.4上后也能够正常运行极大地方便了调试工作.【期刊名称】《现代电子技术》
【年(卷),期】2006(029)016
【总页数】3页(P88-90)
【关键词】嵌入式系统;Linux操作系统;Qt;串口驱动
【作者】黎爱琼;陈家林;谈宏华
【作者单位】武汉工程大学,湖北,武汉,430073;武汉工程大学,湖北,武汉,430073;武汉工程大学,湖北,武汉,430073
【正文语种】中文
【中图分类】TN873
串口是计算机一种应用广泛的接口,几乎在每种操作系统以及需要进行数据传送的装置上都支持串口操作。
在Linux操作系统下,如果要进行串口测试,可以使用系统自带的minicom,但这个环境在调试时不方便,设置麻烦,不直观。
如果有
像Windows操作系统下的串口调试助手,在Linux下进行串口调试将极大地提高调试效率。
设备驱动程序是构成Linux内核的主要部分,在高特权的内核环境下运行,如果
他们出错会导致灾难性的后果。
驱动程序的设计是设备开发的难点之一。
Linux操作系统体现了I/O软件目标分层设计的思想,为应用程序提供了一致的
访问接口,Linux I/O系统分层以及各层次的功能如图1所示。
所有与设备相关
的代码都要在驱动程序里完成。
Linux操作系统为编程者写好了第4层软件,为用户程序提供了一致的接口,驱动程序则要遵循这种标准。
在本系统中串口驱动是实现串口调试助手由理论走向实际应用的一个关键环节,同样他遵循以上的标准。
Linux下串口调试助手的设置包括串口选择,波特率、奇偶效验位、数据位和停止位设置。
1.1 波特率设置
同所有的设备一样,Linux通过设备文件访问串口。
本系统使用#define DEVICE“/dev/ttyS1”定义串行端口Port 1的端口设备文件系统,以同样方
式可以定义其他端口的端口设备文件。
为了访问串口,仅需打开相应的设备文件即可。
这里可以使用open()函数访问他,本系统使用comfd=::open (DEVICE,O-RDWR|O-NOCTTY|ONDELAY)语句就可以实现对前面定
义的串行口1的访问。
采用这种方式打开设备文件,使用了read+write模式;
其中O-NOCTTY标志告诉Linux,该程序不想成为此端口的“控制终端”,如
果没有强调这一点,那么任何输入(例如键盘的中断信号等)都会影响程序的执行;O-NDELAY标志告诉Linux,该程序并不关心DCD信号线所处的状态,即不管
另外一端的设备是在运行还是被挂起,如果没有指定该标志,那么程序就会被设置为睡眠状态,直到DCD信号线为低电平为止。
在本系统中使用cfsetospeed()和cfsetispeed()函数在termios结构中设置
波特率。
下面是设置串口参数函数setparms()中设置波特率的部分代码,在此设置了9 600, 57 600,115 200三种波特率,其他的波特率可以根据用户的需
要添加。
cfsetispeed(&tty,speed)将波特率填入串口输入端,cfsetospeed(&tty,speed)将波特率填入串口输出端。
ccflag成员包含了2个必须时刻保持使能状
态的参数:CLOCAL和CREAD,确保了程序在突发的作业控制和挂起信号到来时,不会成为端口的占有者,同时串行口的接口驱动会读取输入的数据。
tcflush(fd,TCIFLUSH)中TCIFLUSH表示溢出的数据可以接收,但不读,这个函数用来防止数据溢出时程序崩溃。
tcsetattr()函数把对串行口的当前设置赋予termios数
据结构,在设置好波特率,并使能本地状态和串行数据接收后,使用tcsetattr()函数选择新的设置。
TCSANOW常数表示,无需等待数据发送或接收结束,所有
的改变必须立即生效。
当然,还有别的常数可完成等待数据发送或接收结束的功能。
绝大多数系统并不支持不同的输入和输出速率,要确保将输入和输出设置一致。
1.2 奇偶效验位、数据位和停止位设置
奇偶效验位、数据位和停止位设置方法很相似,但同波特率设置不同,不能很方便地用函数设置他们,只能使用一些掩码方法实现设置。
主要使用tty.c-cflag,tty.c-iflag,tty.c-oflag定义各参数量,tty.c-cflag用来设置端口控制模式,tty.c-iflag控制对于在端口接收到的所有字符的输入处理过程,tty.c-oflag控
制对于在端口接收到的所有字符的输入处理过程。
最后在控制串口函数中调用::setparms(comfd,Baud-Box->currentItem(),8,ParityBox->currentItem(),Stop-Box->currentItem()+1)语句来完成对串口参数设置。
串口驱动程序流程图如图2
所示。
串口调试助手界面是在Red Had 9.0下的Qt Designer编程环境下设计的。
Qt
是由挪威Trolltech公司开发的面向对象、高度封装的跨平台C++图形用户界面应用软件框架,他能提供一个开发商业级别、多平台应用的软件环境。
在Qt环境下编程如果对C++语言非常熟悉可以直接着手编写源代码;如果只具备一定的C/C++基础,则可以从Qt的GUI工具Qt Designer设计入手,再在需要的时候将图形界面生成源代码,在生成的源代码中添加需要添加的程序。
本串口调试助手的设计是从Qt的GUI工具Qt Designer设计入手的。
该界面主要涉及到4种类:QPushButton,QTextLabel,QComboBox,QTextEdit。
这4种类也是最常用的类,与其他组件组合就可以执行相应的动作。
该串口调试助手的基本流程图如图3所示。
首先新建一个工程,然后生成一个Form面板,调整到适当的大小,再在其上放置TextLabel控件、PushButton控件、ComboBox控件、TextEdit控件。
TextLabel控件实现对PushButton控件和ComboBox控件的注释说明;PushButton控件通过点击信号发出命令,计算机执行相应的动作;ComboBox 控件通过点击信号弹出选择的项目列表,用户选择当前所需要的选项;TextEdit 控件实现读写字符串,也就是输入用户需要发送的信息以及接收对方发送的信息。
界面编写完成后再生成main.cpp文件,保存于工程中就可以在Linux的终端下通过gdb工具来调试程序,其串口调试助手界面如图4所示。
从图4可以看到,使用该串口在Linux下调试串口会像在Windows下调试串口一样方便、直观。
当调试时,用户根据实际情况选择相应的串行端口,设定所需的波特率(在此选用9 600),再设置奇偶校验位、数据位、停止位;点击“打开串口”按钮便可以进行数据的传送和接收,当在发送文本框中输入数据,点击“手动发送”按钮便可以将数据发送给目标机或目标板;或者对方发送数据,可以在接收文本框中看到接收的数据。
可以通过“清除接收区”按钮清除接收的数据,以及通过“停止显示”停止接收数据在接收文本框中的显示。
Qt通过Signal和Slot机制实现对象间的通信,这大大简化了程序,免去使用繁
杂的函数指针,也方便了程序员,如实现关闭串口调试助手主界面,Qt不是通过编写繁琐的程序代码实现的,而是通过connect(CloseBUT,SIGNAL(clicked ()),this,SLOT(close))这样简单的连接就能实现。
如果还需要添加代码可以通过Source生成一个form.ui.h文件,在form.ui.h文件中编写程序代码即可。
另外为了方便程序的添加以及一些参数的调整可以通过uic工具生成界面的.h 文件和.cpp文件,再在其源代码中添加程序,便能完成相应的任务。
该串口调试助手已经成功地实现了Linux系统下两PC机之间的数据传输以及Linux操作系统与Windows操作系统之间的串口数据传输,还成功地将其移植到S3C2410的Linux 2.4系统上运行,实现PC机与目标板的串行数据传输。
【相关文献】
[1]吴俊安,江泽涛,涂斌.Linux下PC机串口与智能仪器间的数据通信[J].计算机与现代化,2005(7):39-42.
[2]陈磊松,许华荣.串口通讯在Linux操作系统中的应用[J].漳州师范学院学报,2005(2):37-41.
[3]Xteam(中国)软件技术有限公司.Qt程序设计[M].北京:清华大学出版社,2002.
[4]谢瑞和.串行技术大全[M].北京:清华大学出版社,2003.。