基于linux的RS_232C串口通信的研究
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 . 2 串口参数设置
# includ e < stdio . h> /* 头文件定义 * / # includ e < un istd. h > # includ e < ter m ios . h> .. . .. . st r u ct ter m ios opt ; /* 定义指向 ter m ios 结构类型的指针 op* t / .. . .. . tcgetat tr( fd , & op t) ; /* 获得串口指向 ter m ios 结构的指针* / .. . .. . cfset ispeed (& op t , B 9600 ); /* 指定输入波特率为 9600b it / s * / cfsetospeed ( & op t , B9600 ) ; /* 指定输出波特率为 9600b it / s * / op t . c_ cf lag& = ~ CSIZE; /* 先屏蔽其他标志再将数据帧改为 8b i* t / /* 奇校检 * / /* 不使用数据流控制 * / /* 设置停止位 * / /* 再次设置串口 * /
收稿日期 : 2010- 03 作者简介 : 李筠 ( 1975 ) , 女 , 副教授 , 研究方向为信号分析与处理。
∀ 44∀ 在后面的程序中通过调用 tcgetattr 函数获得标 准输入的 ter m ios 信息, 使 用 tcse tattr 函 数将修改后的 ter m ios 参 数设置到终端中。 2 数据传输实现方法口 2 . 1 打开和关闭串口 与打开文件一样 , 打开串口同样使 用 open 函数。为了防止从键盘上输入 的 中 止 信 号 影 响 进 程, 使 用 了 O _ NOCTTY 参数, 它表 示, 如 果打开的 是
(丁云编发 ) ( 上接第 44页 ) 将写串口程序进行交叉编译及读串口程序进行 PC 机编译 , 分别得到宿主机与目标机的可执行文件; 然后利用 m inicom 将写串口程序下载到目标机上, 分 别执行得到运行结果 , 成功实现目标机与宿主机之间 的双向通信。 4 总结 本文介绍了 linux 下串口的实现方法, 串口参数的 设置。根据经验 , 在 linux 下串口参数设置 , 串口速度 和数据帧大小这两个参数的设置是很重要的。若速度 太快容易丢帧或者帧损坏 , 导致重传该帧 ; 而若速度太 慢 , 则会影响效率、 浪费资源。对于数据帧的 大小而 言 , 若数据帧太大 , 每一个数据帧出错导致该数据帧重 新传输的几率就会大大增加; 而数据帧太小, 则确认帧 就会大大增加, 并且系统花在校验上的时间也会因此 而增多 , 从而串口传输的效率也就会降低。因此, 串口 速度和数据帧大小将直接影响到串口文件传输的效率 和质量。传送双方应该根据传送和接收设备的状况, 合理配置最佳的串口传输状态。 鉴于 linux 在嵌入式领域的应用已经非常广泛, 本 文给出了一种基于 linux 嵌入式的串口通信系统 , 目标 机采用 S3C2440 芯片作为串口通信的控制器件, 实现 了在 linux 操作系统下宿主机与目标机间双向通信, 具 有一定的意义。 参考文献:
2010 年第 7期
仪 表 技 术
∀ 47∀
UART 中断控制寄存器的中断控制位使能该中断。单 片机数据发送程序流程图如图 4 所示。
程序经过实际运行, 结果表明系统工作稳定, 数据发送 和接收正确。 参考文献:
[ 1] 何立民 . 单片机应用系统设计 [ M ]. 北京 : 北京航 空航天大 学出版社 , 1995 . [ 2] 李华 . M CS- 51 系列单片机实用接口技术 [M ] . 北京 : 北京 航空航天大学出版社 , 1993 . [ 3] 汪晓平 . V isua l Basic网络高级编程 [M ] . 北京 : 人民邮电出 版社 , 2001 .
板采用 D I MM - 200 连接器与底板相连接 , 工作可靠, 可稳定运行在 400 MH z的时钟频率下。其外设非常丰 富 , 功能强大 , 为实现在 linux 操作系统下计算机与开 发板间的串口通信提供了可靠的保证。该开发板支持 一个五线异步串行口和一个三线串口 , 波特率最高达 115200b it / s, 能实现计算机与开发板间的数据传输与 控制。其硬件结构原理如图 1所示。 在宿主机上 linux 操作系统下编写好串口通信的 程序, 通过 JTAG 接口模块下载至开发板中, 在相应的 软件控制命令下 , 通过串行连接线即可实现宿主机与 目标机间数据的发送和接收。目标机中电源模块提供 了开发板系统工作所需的正常电压 , 外部存储器模块 由 64 M 字节的 NAND F lash 构成, 它提供了目标板的 存储数据, 各种数据信息可以通过液晶显示模块及时 显示出来; 为了实现对目标机操作的控制 , 本系统还带 有键盘控制模块。当然作为一个完整的系统, 还必须 配有其他外围电路, 以保证系统的正常工作。 3 . 2 软件设计 本系统软件的实现是通过串口设置和读写串口等 操作来完成宿主机与目标机间的串口通信。本文实现 的功能是从宿主机向目标机发送数据 , 其读、 写串口的 流程图分别如图 2 和图 3所示。
R eserach for RS- 232C Serial Comm unication of L inux Syste m
L I Jun , WU Deng feng
( U n iversity o f Shangha i for Sc ience and T echno logy , Shangha i 200093 , Ch ina)
# includ e < ter m ios . h> s truct ter m ios { tcf lag_t c_iflag; tcf lag_t c_of lag; tcf lag_t c_cf lag; tcf lag_t c_lflag; cc_ t c_cc [ NCCS ] ; }; /* 输入方式标志位 * / /* 输出方式标志位 * / /* 控制方式标志位 * / /* 本地模式标志位 * / /* 控制的特殊字符 * /
2010 年第 7期
仪 表 源自文库 术
∀ 43∀
基于 li nux的 RS- 232C 串口通信的研究
李 筠, 邬登风 (上海理工大学, 上海 200093)
摘要 : 文章主要 研究了在 linux 下的 RS- 232C 串口通信的读写控制 , 论述了如何对 linux 系统硬件进行访问 , linux系统下串口 的主要函数 、 串口的参数配置 , 最后给出了 linux 系统下的 R S- 232C 串口通信在 S3C2440 嵌入式开发平台中的应用 。 关键词 : linux ; RS- 232C; 串口 ; 数 据传输 ; 嵌入式系统 文献标识码 : A 文 章编号 : 1006- 2394( 2010) 07- 0043- 02 中图分类号 : T P39
其中 tcge tattr 和 tcsetattr 函 数中返回的结 果就保 存在 ter m ios结构体中 , tcgetattr 函数用于获取终端的 相关参数, tcsetattr 函数则用于设置终端参数。其函数 原型如下所示:
# includ e < ter m ios . h> # includ e < un istd. h > in t tcgetat tr( int fd , struct ter m ios * tp ) ; in t tcsetattr( in t fd, stru ct ter m ios * tp) ; /* fd 为终端的文件描述符 * /
1
linux 操作系统中的串口通信设备
1 . 1 串行口的定义 串行口的数据传输是以串行方式进行的, 串口在 数据通信中 , 一次只传输一个比特的数据。串行数据 的传输速度用波特率来描述, 串行通信设备也称为数 据通 信设备 或数据 终端 设备。常 用的串 口是 RS 232C 接口 , 是一个 25 帧的 DB25 连接器。 1 .2 linux 中的设备文件 在 linux 环 境下 , 存 在一 个抽 象化的 设 备目 录 / dev, 该目录下存有指向系统中硬件的特殊文件。这些 指向硬件的文件 , 使用户可以像访问普通文件一样来 访问硬件, 而无需使用特殊的接口函数。 linux 操作系统下串口等通信资源 是作为串行通 信终端设备 ttySn 实现的, 终端的功能就是发送用户输 入的请 求 给主 机 , 并 显示 主 机完 成 运 算后 的 结 果。 linux 操作系统中的所有设备以设备文件名的方式存 储在目录 / dev 中, 查看 /dev 目录下的以 tty 开头的设 备名称 , 可以看到 lin ux 系统中所有的终端设备。串行 通信终端作为一种重要的终端设备, 是以 ttySn 的形式 存在于设备目录 /dev 下。 linux 系统将每个串行端口 看作是一个字符设备, 串行端口 对应的设备名称 是 / dev / ttyS0 、/ dev / ttyS1 、/ dev / ttyS2 、/ dev / ttyS3 , 分别对应
op t . c_ cf lag | = CS8 ; op t . c_ cf lag | = ( PA RODD | PARENB ) ; op t . c_ cf lag& = ~ CRTSCTS; op t . c_ cf lag | = CSTO PB; .. . .. . tcsetattr( fd, TCANOW, & opt) ;
3 嵌入式 linux在 S3C2440开发平台的串口通信实现 3 . 1 系统硬件设计 在串口通信的实现过程中, 要保证数据传输的可 靠性和稳定性, 其硬件设计是必不可少的。本系统中 开发板采用 SAM SUNG S3C2440A 微处理器设计 , 核心
图 2 读串口流程图 图 3 写串口流程图
( 下转第 47 页 )
Abstract : RS- 232C seria l commun icat io n ism a in ly studied to contro l to read and w rite in linux system. An over view of accessing linux hard w are , the functions and param eters configuration o f the serial port is d iscussed . F in ally , the app lications for RS- 232C seria l comm unication of linux system in S3C2440 embedded deve lopm ent platfor m are g iven . K ey w ord s : linux; RS- 232C; serial por; t data transm ission ; embedded system 于硬件的 COM 1 、 COM 2 、 COM 3 、 COM 4 , 每一个设备由 一个主设备号确定, 对于串口设备 , ttySn 的主设备号 为 4, 它既能用于输入也能用于输出。 1 . 3 串行通信中的主要函数 linux 中定义了一个查询和操纵各 种终端的标准 接口, 该接口被称为 term io s, 在系统的头文件 ter m ios . h! 中定义。所有的 tty 操作都通过该接口和几个函数 调用来实现 , 以下列出了 ter m ios的数据结构, 它包含 了各终端特性的完整描述, 相关联的函数可以查询和 修改这些特性。
仪 表 技 术
2010 年第 7期
图 1 系统硬件结构原理
一个终端设备, 程序不会成为对应这个端口的控制终 端。具体代码如下:
# includ e < sys / typ es . h> # includ e < sys / stat . h> # includ e < fcnt . l h> /* 打开指定的串口 * / in t op en_port( char * port) { in t fd ; if( ( fd= open( port ,O_ RDWR |O _NOCTTY |O _ NON BLO CK ) ) = = - 1) { perror( "C annot op en th e des ired port" ) ; return - 1 ; } return fd; # # } /* 关闭指定的串口 * / void close_port( in t fd) { close( fd ); } /* 头文件定义 * /