c linux 串口函数

Listing  1   -  Opening a serial port. 

    #include  
< stdio.h >     /* Standard input/output definitions */  
    #include  
< string .h >    /* String function definitions */  
    #include  
< unistd.h >    /* UNIX standard function definitions */  
    #include  
< fcntl.h >     /* File control definitions */  
    #include  
< errno.h >     /* Error number definitions */  
    #include  
< termios.h >   /* POSIX terminal control definitions */  

    
/* 
     * 'open_port()' - Open serial port 1. 
     * 
     * Returns the file descriptor on success or -1 on error. 
     
*/
 

    
int  
    open_port(
void
    

      
int fd; /* File descriptor for the port */ 


      fd 
= open("/dev/ttyS0", O_RDWR  ¦ O_NOCTTY  ¦ O_NDELAY); 
      
if (fd == -1
      

       
/* 
* Could not open the port. 
*/
 

perror(
"open_port: Unable to open /dev/ttyS0 - "); 
      }
 
      
else 
fcntl(fd, F_SETFL, 
0); 

      
return (fd); 
    }
 

List2
-----  Setting the baud rate. 

    
struct  termios options; 

    
/* 
     * Get the current options for the port... 
     
*/
 

    tcgetattr(fd, 
& options); 

    
/* 
     * Set the baud rates to 19200... 
     
*/
 

    cfsetispeed(
& options, B19200); 
    cfsetospeed(
& options, B19200); 

    
/* 
     * Enable the receiver and set local mode... 
     
*/
 

    options.c_cflag  ¦
=  (CLOCAL  ¦ CREAD); 

    
/* 
     * Set the new options for the port... 
     
*/
 

    tcsetattr(fd, TCSANOW, 
& options); 

Listing 
3   -  Configuring the port  for  raw input.  

    
int             fd; 
    
struct  termios options; 

    
/* open the port */  
    fd 
=  open( " /dev/ttyS0 " , O_RDWR  ¦ O_NOCTTY  ¦ O_NDELAY); 
    fcntl(fd, F_SETFL, 
0 ); 

    
/* get the current options */  
    tcgetattr(fd, 
& options); 

    
/* set raw input, 1 second timeout */  
    options.c_cflag      ¦
=  (CLOCAL  ¦ CREAD); 
    options.c_lflag     
&=   ~ (ICANON  ¦ ECHO  ¦ ECHOE  ¦ ISIG); 
    options.c_oflag     
&=   ~ OPOST; 
    options.c_cc[VMIN]  
=   0
    options.c_cc[VTIME] 
=   10

    
/* set the options */  
    tcsetattr(fd, TCSANOW, 
& options); 
 Initializing the MODEM. 

    
int                    /* O - 0 = MODEM ok, -1 = MODEM bad */  
    init_modem(
int  fd)    /* I - Serial port file */  
    

      
char buffer[255];  /* Input buffer */ 
      
char *bufptr;      /* Current char in buffer */ 
      
int  nbytes;       /* Number of bytes read */ 
      
int  tries;        /* Number of tries so far */ 

      
for (tries = 0; tries  < 3; tries ++
      

       
/* send an AT command followed by a CR */ 
if (write(fd, "AT "3)  < 3
  
continue

       
/* read characters into our string buffer until we get a CR or NL */ 
bufptr 
= buffer; 
while ((nbytes = read(fd, bufptr, buffer + sizeof(buffer) - bufptr - 1)) > 0

  bufptr 
+= nbytes; 
  
if (bufptr[-1== ' '  ¦ ¦ bufptr[-1== ' '
            
break
}
 

       
/* nul terminate the string and see if we got an OK response */ 
*bufptr = '
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值