当前位置:文档之家› Linux 下串口编程入门

Linux 下串口编程入门


DTE←DCE 表示 DCE 接收到远程载波 DTE→DCE DTE 准备好 DTE←DCE 表示 DCE 与线路接通,出现振铃
回页首
串口操作
串口操作需要的头文件
# i n c l u d e # i n c l u d e # i n c l u d e # i n c l u d e # i n c l u d e # i n c l u d e # i n c l u d e # i n c l u d e < s t d i o . h > < s t d l i b . h > < u n i s t d . h > < s y s / t y p e s . h > < s y s / s t a t . h > < f c n t l . h > < t e r m i o s . h > < e r r n o . h > / * 文件控制定义* / / * P P S I X 终端控制定义* / / * 错误号定义* / / * 标准输入输出定义* / / * 标准函数库定义* / / * U n i x 标准函数定义* /
设置波特率的例子函数:
/ * * * @ b r i e f 设置串口通信速率 * @ p a r a m f d * @ r e t u r n v o i d * / i n ts p e e d _ a r r [ ]={B 3 8 4 0 0 ,B 1 9 2 0 0 ,B 9 6 0 0 ,B 4 8 0 0 ,B 2 4 0 0 ,B 1 2 0 0 ,B 3 0 0 , B 3 8 4 0 0 ,B 1 9 2 0 0 ,B 9 6 0 0 ,B 4 8 0 0 ,B 2 4 0 0 ,B 1 2 0 0 ,B 3 0 0 ,} ; i n tn a m e _ a r r [ ]={ 3 8 4 0 0 , 1 9 2 0 0 , 9 6 0 0 , 4 8 0 0 , 2 4 0 0 , 1 2 0 0 , 3 0 0 ,3 8 4 0 0 , 1 9 2 0 0 , 9 6 0 0 ,4 8 0 0 ,2 4 0 0 ,1 2 0 , 3 0 0 ,} ; v o i ds e t _ s p e e d ( i n tf d ,i n ts p e e d ) { i n t i n t i ; s t a t u s ; O p t ; 类型 i n t 打开串口的文件句柄 * @ p a r a m s p e e d 类型 i n t 串口速度
回页首
打开串口
在 Linux 下串口文件是位于 /dev 下的 串口一 为 /dev/ttyS0 串口二 为 /dev/ttyS1 打开串口是通过使用标准的文件打开函数操作:
i n tf d ; / * 以读写方式打开串口* / f d=o p e n (" / d e v / t t y S 0 " ,O _ R D W R ) ; i f( 1= =f d ) { / * 不能打开串口一* /
Linux 下串口编程入门
Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行 简单的介绍。
8
左锦 (zuo170@), 副总裁, 南沙资讯科技园 2003 年 7 月 03 日
评论
内容
串口简介
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂 家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通 讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个 25 个脚的 DB25 连接器, 对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。传输距离在码元畸变小于 4% 的情况下,传输电缆长度应为 50 英尺。
序号 2 3 4 5 6 7 8 20 22 信号名称 发送数据 接收数据 请求发送 允许发送 数据设备准备好 信号地 载波检测 数据终端准备好 振铃指示 符号 TXD RXD RTS CTS DSR DCD DTR RI 流向 功能
DTE→DCE DTE 发送串行数据 DTE←DCE DTE 接收串行数据 DTE→DCE DTE 请求 DCE 将线路切换到发送方式 DTE←DCE DCE 告诉 DTE 线路已接通可以发送数据 DTE←DCE DCE 准备好 信号公共地
|= ~PARODD; &= ~CSTOPB; &= ~CSIZE; |= ~CS7; &= ~PARENB; &= ~CSTOPB; &= &~CSIZE; |= CS8;
设置效验的函数:
/ * * * @ b r i e f 设置串口数据位,停止位和效验位 类型 i n t 打开的串口文件句柄 i n t 数据位 i n t 停止位 取值 为 7 或者8 取值为 1 或者2 * @ p a r a m f d
设置这个结构体很复杂,我这里就只说说常见的一些设置: 波特率设置 下面是修改波特率的代码:
s t r u c t t e r m i o sO p t ; t c g e t a t t r ( f d ,& O p t ) ; c f s e t i s p e e d ( & O p t , B 1 9 2 0 0 ) ; c f s e t o s p e e d ( & O p t , B 1 9 2 0 0 ) ; t c s e t a t t r ( f d , T C A N O W , & O p t ) ; / * 设置为1 9 2 0 0 B p s * /
* @ p a r a m d a t a b i t s 类型 * @ p a r a m s t o p b i t s 类型 * @ p a r a m p a r i t y 类型 * /
i n t 效验类型 取值为N , E , O , , S
i n ts e t _ P a r i t y ( i n tf d , i n td a t a b i t s , i n ts t o p b i t s , i n tp a r i t y ) { s t r u c tt e r m i o so p t i o n s ; i f (t c g e t a t t r (f d , & o p t i o n s ) ! = 0 ){ p e r r o r ( " S e t u p S e r i a l1 " ) ; r e t u r n ( F A L S E ) ; } o p t i o n s . c _ c f l a g& =~ C S I Z E ; s w i t c h( d a t a b i t s )/ * 设置数据位数* / { c a s e7 : o p t i o n s . c _ c f l a g| =C S 7 ; b r e a k ; c a s e8 : o p t i o n s . c _ c f l a g| =C S 8 ; b r e a k ; d e f a u l t : f p r i n t f ( s t d e r r , " U n s u p p o r t e dd a t as i z e \ n " ) ;r e t u r n( F A L S E ) ; } s w i t c h( p a r i t y ) { c a s e' n ' : c a s e' N ' : o p t i o n s . c _ c f l a g& =~ P A R E N B ; o p t i o n s . c _ i f l a g& =~ I N P C K ; b r e a k ; c a s e' o ' : c a s e' O ' : o p t i o n s . c _ c f l a g| =( P A R O D D|P A R E N B ) ;/ * 设置为奇效验* / o p t i o n s . c _ i f l a g| =I N P C K ; b r e a k ; c a s e' e ' : c a s e' E ' : o p t i o n s . c _ c f l a g| =P A R E N B ; o p t i o n s . c _ c f l a g& =~ P A R O D D ; o p t i o n s . c _ i f l a g| =I N P C K ; b r e a k ; c a s e' S ' : c a s e' s ' : / * a sn op a r i t y * / o p t i o n s . c _ c f l a g& =~ P A R E N B ; o p t i o n s . c _ c f l a g& =~ C S T O P B ; b r e a k ; d e f a u l t : f p r i n t f ( s t d e r r , " U n s u p p o r t e dp a r i t y \ n " ) ; r e t u r n( F A L S E ) ; } / * 设置停止位* / s w i t c h( s t o p b i t s ) { c a s e1 : o p t i o n s . c _ c f l a g& =~ C S T O P B ; b r e a k ; c a s e2 : o p t i o n s . c _ c f l a g| =C S T O P B ; b r e a k ; d e f a u l t : f p r i n t f ( s t d e r r , " U n s u p p o r t e ds t o pb i t s \ n " ) ; r e t u r n( F A L S E ) ; / *E n a b l ep a r i t y* / / * 转换为偶效验* / / *D i s n a b l ep a r i t yc h e c k i n g* / / *D i s n a b l ep a r i t yc h e c k i n g* / / *C l e a rp a r i t ye n a b l e* / / *E n a b l ep a r i t yc h e c k i n g* /
相关主题