具体解释linux下的串口通讯开发
串行口是计算机一种经常使用的接口,具有连接线少。通讯简单,得到广泛的使用。经常使用的串口是RS-232-C接口(又称EIA
RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。串口通讯指的是计算机依次以位(bit)为单位来传送数据。串行通讯使用的范围非常广。在嵌入式系统开发过程中串口通讯也经经常使用到通讯方式之中的一个。
Linux对全部设备的訪问是通过设备文件来进行的,串口也是这样,为了訪问串口。仅仅需打开其设备文件就可以操作串口设备。在linux系统以下,每个串口设备都有设备文件与其关联,设备文件位于系统的/dev文件夹以下。如linux下的/ttyS0,/ttyS1分别表示的是串口1和串口2。
以下来具体介绍linux下是怎样使用串口的:
1. 串口操作须要用到的头文件

1 #include <stdio.h> /*标准输入输出定义*/
2
3 #include <stdlib.h> /*标准函数库定义*/
4
5 #include <unistd.h> /*Unix 标准函数定义*/
6
7 #include <sys/types.h>
8
9 #include <sys/stat.h>
10
11 #include <fcntl.h> /*文件控制定义*/
12
13 #include <termios.h> /*POSIX 终端控制定义*/
14
15 #include <errno.h> /*错误号定义*/
16
17 #include <string.h> /*字符串功能函数*/
18

2. 串口通讯波特率设置
波特率的设置定义在<asm/termbits.h>,其包括在头文件<termios.h>里。
经常使用的波特率常数例如以下:
B0-------à0
B1800-------à1800
B50-----à50
B2400------à2400
B75-----à75
B4800------à4800
B110----à110 B9600------à9600
B134----à134.5 B19200-----à19200
B200----à200 B38400------à38400
B300----à300 B57600------à57600
B600----à600 B76800------à76800
B1200---à1200 B115200-----à115200
假定程序中想要设置通讯的波特率,使用cfsetispeed( )和cfsetospeed(
)函数来操作,获取波特率信息是通过cfgetispeed()和cfgetospeed()函数来完毕的。比方能够这样来指定串口通讯的波特率:

1 #include <stdio.h> //头文件定义
2
3 
..
4
5 struct termios opt; /*定义指向termios 结构类型的指针opt*/
6
7 /***************下面设置通讯波特率****************/
8
9 cfsetispeed(&opt,B9600 ); /*指定输入波特率。9600bps*/
10
11 cfsetospeed(&opt。B9600);/*指定输出波特率,9600bps*/
12
13 /************************************************/
14
15 


16
17

一般来说。输入、输出的波特率应该是一致的。
3. 串口属性配置
在程序中,非常easy配置串口的属性。这些属性定义在结构体struct termios中。为在程序中使用该结构体,须要包括文件<termbits.h>。该头文件定义了结构体struct
termios。
该结构体定义例如以下:

1 #define NCCS 19
2
3 struct termios {
4
5 tcflag_t c_iflag; /* 输入參数 */
6
7 tcflag_t c_oflag; /* 输出參数 */
8
9 tcflag_t c_cflag; /* 控制參数*/
10
11 tcflag_t c_ispeed; /* 输入波特率 */
12
13 tcflag_t c_ospeed; /* 输出波特率 */
14
15 cc_t c_line; /* 线控制 */
16
17 cc_t c_cc[NCCS]; /* 控制字符*/
18
19 };
20

当中成员c_line在POSIX(Portable Operating
System Interface for UNIX)系统中不使用。对于支持POSIX终端接口的系统中。对于port属性的设置和获取要用到两个重要的函数是:
(1).int
tcsetattr(int fd。int opt_DE,*ptr)
该函数用来设置终端控制属性,其參数说明例如以下:
l fd:待操作的文件描写叙述符
l opt_DE:选项值。有三个选项以供选择:
TCSANOW: 不等传输数据完成就马上改变属性
TCSADRAIN:等待全部传输数据结束才改变属性
TCSAFLUSH:清空输入输出缓冲区才改变属性
l *ptr:指向termios结构的指针
函数返回值:成功返回0,失败返回-1。
(2).int tcgetattr(int
fd。*ptr)
该函数用来获取终端控制属性,它把串口的默认设置赋给了termios数据数据结构。其參数说明例如以下:
l fd:待操作的文件描写叙述符
l *ptr:指向termios结构的指针
函数返回值:成功返回0。失败返回-1。
4. 打开串口
在前面已经提到linux下的串口訪问是以设备文件形式进行的。所以打开串口也即是打开文件的操作。函数原型能够例如以下所看到的:
int open(“DE_name”。int
open_Status)
參数说明:
(1).DE_name:要打开的设备文件名称
比方要打开串口1。即为/dev/ttyS0。
(2).open_Status:文件打开方式。可採用以下的文件打开模式:
l O_RDONLY:以仅仅读方式打开文件
l O_WRONLY:以仅仅写方式打开文件
l O_RDWR:以读写方式打开文件
l O_APPEND:写入数据时加入到文件末尾
l O_CREATE:假设文件不存在则产生该文件。使用该标志须要设置訪问权限位mode_t
l O_EXCL:指定该标志,而且指定了O_CREATE标志,假设打开的文件存在则会产生一个错误
l O_TRUNC:假设文件存在而且成功以写或者仅仅写方式打开。则清除文件全部内容,使得文件长度变为0
l O_NOCTTY:假设打开的是一个终端设备,这个程序不会成为相应这个port的控制终端。假设没有该标志,不论什么一个输入,比如键盘中止信号等,都将影响进程。
l O_NONBLOCK:该标志与早期使用的O_NDELAY标志作用差点儿相同。程序不关心DCD信号线的状态。假设指定该标志,进程将一直在休眠状态,直到DCD信号线为0。
函数返回值:
成功返回文件描写叙述符,假设失败返回-1
比如假定以可读写方式打开/dev/ttyS0设备,就能够这样操作:

1 #include<stdio.h> //头文件包括
2
3 

4
5 int fd; /* 文件描写叙述符 */
6
7 fd = open("/dev/ttyS0", O_RDWR | 0_NOCTTY)。 /*以读写方式打开设备*/
8
9 if(fd == -1)
10
11 perror("Can not open Serial_Port 1"n。")。/*打开失败时的错误提示*/
12
13 
..
14
15

5. 串口读操作(接收端)
用open函数打开设备文件,函数返回一个文件描写叙述符(file
descriptors,fd),通过文件描写叙述符来訪问文件。读串口操作是通过read函数来完毕的。函数原型例如以下:
int read(int fd, *buffer,length)。
參数说明:
(1).int fd:文件描写叙述符
(2).*buffer:数据缓冲区
(3).length:要读取的字节数
函数返回值:
读操作成功读取返回读取的字节数,失败则返回-1。
6. 串口写操作(发送端)
写串口操作是通过write函数来完毕的。
函数原型例如以下:
write(int fd, *buffer,length);
參数说明:
(1).fd:文件描写叙述符
(2).*buffer:存储写入数据的数据缓冲区
(3).length:写入缓冲去的数据字节数
函数返回值:
成功返回写入数据的字节数,该值通常等于length,假设写入失败返回-1。
比如:向终端设备发送初始化命令

1 #include<stdio.h> //头文件包括
2 

3
4 int n
5
6 sbuf[]={Hello。this is a Serial_Port test!"n };//待发送数据
7
8 int len_send="sizeof"(sbuf);//发送缓冲区字节数定义
9
10 n = write(fd,sbuf,len_send); //写缓冲区
11
12 if(n == -1)
13
14 {
15
16 printf("Wirte sbuf error."n");
17
18 }
19 


7. 关闭串口
对设备文件的操作与对普通文件的操作一样,打开操作之后还须要关闭,关闭串口用函数close( )来操作,函数原型为:
int close(int fd);
參数说明:
fd:文件描写叙述符
函数返回值:
成功返回0。失败返回-1。
具体解释linux下的串口通讯开发的更多相关文章
- 详解linux下的串口通讯开发
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...
- 【转载】详解linux下的串口通讯开发
来源:https://www.cnblogs.com/sunyubo/archive/2010/09/26/2282116.html 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使 ...
- 关于嵌入式linux下的串口通讯问题---需增加回车/换行才能接收
问题:在Linux应用层,直接从/dev/tty***使用read()函数读数据,无法读到,只有在数据末尾加上0a/0d才可以读到数据(这里是发送十六进制的数据,ASCLL码同理,增加回车才可以读到数 ...
- Linux学习心得之 Linux下命令行Android开发环境的搭建
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下命令行Android开发环境的搭建 1. 前言2. Jav ...
- linux下查看串口信息
rs232串口通信接口:当通信距离较近时(<12m),可以使用电缆线直接连接,若距离较远,需附加调制解调器. 9个脚针的定义: CDC数据载波检测,RXD接收数据,TXD发送数据,DTR数据中断 ...
- Ubuntu Linux下如何配置Android开发环境
下载和安装Win7系统Android开发环境中讲了怎样在Win7系统中安装Android开发环境,那么怎样在Linux系统中配置Android开发环境呢?本篇文章就将演示如何使用Eclipse.And ...
- Linux下快速搭建php开发环境
php开发环境快速搭建 一.Linux下快速搭建php开发环境 1.安装XAMPP for Linux XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包,使用XA ...
- Linux下的串口调试工具——Xgcom
Linux下的串口调试工具——Xgcom xgcom的下载网址:https://code.google.com/archive/p/xgcom/downloads (1)安装必须的库 apt-get ...
- WinCE下的串口通信开发(VS2005,VB.Net,VC++)
WinCE下的串口通信开发(VS2005,VB.Net,VC++) WinCE下的串口通信开发 一.利用Visual Basic 开发很简单,因为有现成的控件可以直接调用 以VS2005为例,首先 ...
随机推荐
- iOS中autolaylout和sizeclass的理解
没发现居然有三四个月没写博客了,好惭愧.都是加班太多了,还好现在换了一家,还是得继续写啊. 主要是学习了http://onevcat.com/上的内容写的笔记,并自己动手操作了一下. 已经排好版了,懒 ...
- HTML5中的拖放
关于HTML5中的拖放 拖放(Drag 和 Drop)是一种常见的特性,即抓取对象以后拖到另一个位置,在 HTML5 中,拖放是标准的组成部分.在HTML5中用户可以使用鼠标选择一个可拖动元素,将元素 ...
- SSL/TLS协议运行机制的概述_转
转自:SSL/TLS协议运行机制的概述 作者: 阮一峰 日期: 2014年2月 5日 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和 ...
- 判断gridView是否有数据
我这里的gridView是采用空模板数据来显示的 当gridView的数据源为空的时候它们就会显示标题 有数据的显示它们就会显示下面的这种 你仔细观察会发现,当有数据的时候空标题的table没有了,解 ...
- trim() 是什么意思?
这是一个很常见的函数,他的所用是去掉字符序列左边和右边的空格,如字符串str = " ai lafu yo ";str = trim(str); cout << str ...
- mysql 分页sql
-- pageSize=3 pageIndex total=7 -- 开始行号 startRowNum=(pageIndex-1)*pageSize+1; -- 结束行号 endRowNum=page ...
- Mac终端Screen命令使用指南
(1)创建会话 使用命令“screen -S RunWork”来创建一个screen会话,命令执行之后,就会得到一个新的shell窗口,为了便于标示可以用快捷键Ctrl-a A(就是按下Ctrl+a键 ...
- solr初认识
Solr : Search On Lucene Replication Solr 基本概况 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言开发, ...
- IOS 程序内部切换语言 的一种方法
本文转载至 http://www.cnblogs.com/wuyijibei/archive/2013/08/01/3230468.html 1: 首先, 所有的语言资源还是需要和现在的i18n方法 ...
- 在 Ubuntu Mate 16.04 上通过 PPA 升级 Mate 1.14
导读 Mate 桌面环境 1.14 现在可以在 Ubuntu Mate 16.04 ("Xenial Xerus") 上使用了.根据这个版本的描述,为了全面测试 Mate 1.14 ...