http://blog.csdn.net/haomcu/article/details/7313006

打开串口1,设置9600波特率、8位数据位、1位停止位以及空校验,之后利用while语句循环判断串口中是否可以读出数据,将串口中数据连续读出后重新写回到串口中。

#include     <stdio.h>
#include     
<stdlib.h>  
#include     
<unistd.h>
  
#include     
<sys/types.h>

#include     
<sys/stat.h>
#include     
<fcntl.h>  
#include     
<termios.h>

#include     
<errno.h>
   
main()
{
    
int  fd;
    
int
 i;
    
int
 len;
    
int n = 0
;      
    
char read_buf[256
];
    
char write_buf[256
];
    
struct
 termios opt; 
    
    fd 
= open("/dev/ttyS0", O_RDWR | O_NOCTTY);    //默认为阻塞读方式

    if(fd == -1 )
    {
        perror(
"open serial 0\n"
);
        exit(
0
);
    }

    tcgetattr(fd, 
&
opt);      
    cfsetispeed(
&
opt, B9600);
    cfsetospeed(
&
opt, B9600);
    
    
if(tcsetattr(fd, TCSANOW, &opt) != 0
 )
    {     
       perror(
"tcsetattr error"
);
       
return -1
;
    }
    
    opt.c_cflag 
&= ~
CSIZE;  
    opt.c_cflag 
|=
 CS8;   
    opt.c_cflag 
&= ~
CSTOPB; 
    opt.c_cflag 
&= ~
PARENB; 
    opt.c_cflag 
&= ~
INPCK;
    opt.c_cflag 
|= (CLOCAL |
 CREAD);
 
    opt.c_lflag 
&= ~(ICANON | ECHO | ECHOE |
 ISIG);
 
    opt.c_oflag 
&= ~
OPOST;
    opt.c_oflag 
&= ~(ONLCR | OCRNL);    //添加的

 
    opt.c_iflag 
&= ~(ICRNL |
 INLCR);
    opt.c_iflag 
&= ~(IXON | IXOFF | IXANY);    //添加的

    
    opt.c_cc[VTIME] 
= 0
;
    opt.c_cc[VMIN] 
= 0
;
    
    tcflush(fd, TCIOFLUSH);
 
    printf(
"configure complete\n"
);
    
    
if(tcsetattr(fd, TCSANOW, &opt) != 0
)
    {
        perror(
"serial error"
);
        
return -1
;
    }
    printf(
"start send and receive data\n"
);
  
    
while(1
)
    {    
        n 
= 0
;
        len 
= 0
;
        bzero(read_buf, 
sizeof(read_buf));    //类似于memset

        bzero(write_buf, sizeof (write_buf));
 
        
while( (n = read(fd, read_buf, sizeof(read_buf))) > 0
 )
        {
            
for(i = len; i < (len + n); i++
)
            {
                write_buf[i] 
= read_buf[i -
 len];
            }
            len 
+=
 n;
        }
        write_buf[len] 
= '\0'
;
              
        printf(
"Len %d \n"
, len);
        printf(
"%s \n"
, write_buf);
 
        n 
=
 write(fd, write_buf, len);
        printf(
"write %d chars\n"
,n);
        
        sleep(
2
);
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值