原创 Linux 下串口编程

2011-8-29 09:10 1553 3 3 分类: 软件与OS

串口简介

串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换 接口技术标准"该标准规定采用一个 25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。传输距离在码元畸变小于 4% 的情况下,传输电缆长度应为 ef="http://digilander.libero.it/robang/rubrica/serial.htm" target="_blank">《Serial Programming Guide for POSIX Operating Systems

计算机串口的引脚说明

序号

信号名称

符号

流向

功能

2

发送数据

TXD

DTE→DCE

DTE发送串行数据

3

接收数据

RXD

DTE←DCE

DTE 接收串行数据

4

请求发送

RTS

DTE→DCE

DTE 请求 DCE 将线路切换到发送方式

5

允许发送

CTS

DTE←DCE

DCE 告诉 DTE 线路已接通可以发送数据

6

数据设备准备好

DSR

DTE←DCE

DCE 准备好

7

信号地

 

 

   信号公共地

8

载波检测

DCD

DTE←DCE

表示 DCE 接收到远程载波

20

数据终端准备好

DTR

DTE→DCE

DTE 准备好

22

振铃指示

RI

DTE←DCE

表示 DCE 与线路接通,出现振铃



串口操作

串口操作需要的头文件

标准输入输出定义
标准函数库定义
标准函数定义


文件控制定义
终端控制定义
错误号定义


打开串口

Linux 下串口文件是位于 /dev 下的

串口一 为 /dev/ttyS0

串口二 为 /dev/ttyS1

打开串口是通过使用标准的文件打开函数操作:

以读写方式打开串口


不能打开串口一
提示错误!


设置串口

最基本的设置串口包括波特率设置,效验位和停止位设置。

串口的设置主要是设置 struct termios 结构体的各成员值。


       输入模式标志 
        输出模式标志 
        控制模式标志
        
        
        

		



设置这个结构体很复杂,我这里就只说说常见的一些设置:

波特率设置

下面是修改波特率的代码:


设置为



设置波特率的例子函数:

设置串口通信速率
类型 打开串口的文件句柄
类型 串口速度



          

          

      
      
      
      
      
           
           
           
        
        
        
            
           
       
       
     
   



效验位和停止位的设置:

无效验

8

Option.c_cflag &= ~PARENB;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS8;

奇效验(Odd)

7

Option.c_cflag |= ~PARENB;
Option.c_cflag &= ~PARODD;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS7;

偶效验(Even)

7

Option.c_cflag &= ~PARENB;
Option.c_cflag |= ~PARODD;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS7;

Space效验

7

Option.c_cflag &= ~PARENB;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= &~CSIZE;
Option.c_cflag |= CS8;

设置效验的函数:

设置串口数据位,停止位和效验位
类型  打开的串口文件句柄
类型  数据位   取值 为 或者
类型  停止位   取值为 或者
类型  效验类型 取值为



        
        
                
                
        
        
        设置数据位数
        
        
                
                
        
                
                
        
                
        


        
        
                
                
                
        
        
                设置为奇效验
                
                
        
        
                
                转换为偶效验
                
                
        
        
            
                
        
                
                
        
设置停止位


        
                
                
        
                
           
        
                 
                 



        

设置超时



        
        




需要注意的是:

如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯,设置方式如下:


		



读写串口

设置好串口之后,读写串口就很容易了,把串口当作文件读写就是。

  • 发送数据

    
    			

  • 读取串口数据

    使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。

    可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。

    
    			

关闭串口

关闭串口就是关闭文件。


		



例子

下面是一个简单的读取串口数据的例子,使用了上面定义的一些函数和头文件

代码说明:使用串口二测试的,发送的数据是字符,
但是没有发送字符串结束符号,所以接收到后,后面加上了结束符号。
我测试使用的是单片机发送数据到第二个串口,测试通过。






        
        
        
                
                
        
        
                


        
        
        
        串口二
        
        
        
                
                
        
循环读取数据

        
        
                
                
                
        

        
        


原文:http://www.ibm.com/developerworks/cn/linux/l-serials/

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /2 下一条