-
linux
下的串口通信程序详解
2009-07-19 12:37
为了说明问题,
下面给出测试程序来理解
linux
下的串口操
作流程,
例程
receive.c
用来
接收从串口发来的数据,而例程
send.c
用来发送数据到串
口。二者成功建立
串口连接后,串口接收端会收到串口发送端发来的字符串数据“Hel
lo,
this is a
Serial Port
test!”。
1.
receive.c
程序清单:
view plain
1.
/*************
******************************************
< br>
2.
*ilename
:
receive.c
< br>
3.
*
Description
:
Receive data
from Serial_Port
4.
*
Date
:
5.
**************
*****************************************/
< br>
6.
< br>/*********************
头文件定义
***********************/
7.
#include
8.
#include
9.
#include
10.
#include
11.
#include
12.
#include
13.
#include
14.
#include
15.
#include
16.
#define max_buffer_size 100
/*
定义缓冲区最大宽度
*/
17.
/
**************************************************
*******/
18.
int
fd,s;
19.
int
open_serial(
int
k)
20.
{
21.
if
(k==0)
/*
串口选择
*/
22.
{
23.
fd =
open(
,O_RDWR|O_NOCTTY);
/*
读写方式打开串口
*/
24.
perror(
);
25.
}
26.
else
27.
{
28.
fd =
open(
,O_RDWR|O_NOCTTY);
29.
perror(
);
30.
}
31.
if
(fd == -1)
/*
p>
打开失败
*/
32.
return
-1;
33.
else
34.
return
0;
35.
}
36.
/**************************************
******************************/
37.
int
main()
38.
{
39.
char
hd[max_buffer_size],*rbuf;
/*
定义接收缓冲区
*/
40.
int
flag_close,
retv,i,ncount=0;
41.
struct
termios opt;
42.
int
realdata=0;
43.
/************
**************************************************
*****/
44.
open_serial(0);
/*
打开串口
1*/
45.
/************
**************************************************
*****/
46.
tcgetattr(fd,&opt);
47.
cfmakeraw(&opt);
48.
/************
**************************************************
***/
49.
cfsetispeed(&opt,B9600);
/*<
/p>
波特率设置为
9600bps*/
50.
cfsetospeed(&opt,B9600);
51.
/************
**************************************************
*****/
52.
tcsetattr(fd,TCSANOW,&opt);
53.
rbuf=hd;
/*
数据保存
p>
*/
54.
printf(
);
55.
retv=read(fd,rbuf,1);
/*
接收数据
*/
56.
if
(retv==-1)
57.
{
58.
perror(
);
/*
读状态标志判断
*/
59.
}
60.
/
*************************
开始接收数据
< br>******************************/
61.
w
hile
(*rbuf!=
'/n'
)
/*
判断数据是否接收完毕
*/
62.
{
63.
ncount+=1;
64.
rbuf++;
65.
retv=read(fd,rbuf,1);
66.
if
(retv==-1)
67.
{
68.
perror(
);
69.
}
70.
}
71.
/
**************************************************
*****************/
72.
printf(
);
/*
输出接收到的数据
*/
73.
for
<
br>/*
(i=0;i
74.
{
75.
printf(
,hd[i]);
76.
}
77.
printf(
);
78.
flag_close =close(fd);
79.
if
(flag_close == -1)
判断是否成功关闭文件
*/
-
-
-
-
-
-
-
-
-
上一篇:测绘专业英语地形测量文章翻译
下一篇:AE 特效中英翻译知识讲解