c linux 串口函数

来源:互联网 发布:vb控件 编辑:程序博客网 时间:2024/06/05 07:38
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 = '
原创粉丝点击