日期:2014-05-16  浏览次数:20647 次

linux下串口编程(读写)
以下是我在linux终端下写的C代码,目的是想让其能接受到串口的数据,可是不知道为什么总是不能接受到,也没有报错信息,请大侠们看看,帮帮忙指点以下,谢谢!

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


#define   BAUDRATE   B38400                        
#define   MODEMDEVICE   "/dev/ttyS0 "
//#define   _POSIX_SOURCE   1   /*   POSIX   compliant   source   */

#define   FALSE   0
#define   TRUE   1

volatile   int   STOP=FALSE;  

main()
{
    int   fd,c,   res;
    struct   termios   oldtio,newtio;
    char   buf[255];

  fd   =   open(MODEMDEVICE,   O_RDWR   |   O_NOCTTY   );  
  if   (fd   <0)   {perror(MODEMDEVICE);   exit(-1);   }

  tcgetattr(fd,&oldtio);  
  bzero(&newtio,   sizeof(newtio));  


  newtio.c_cflag   =   BAUDRATE   |   CRTSCTS   |   CS8   |   CLOCAL   |   CREAD;
 
  newtio.c_iflag   =   IGNPAR   |   ICRNL;
 

  newtio.c_oflag   =   0;
 
  newtio.c_lflag   =   ICANON;

  newtio.c_cc[VINTR]         =   0;           /*   Ctrl-c   */  
  newtio.c_cc[VQUIT]         =   0;           /*   Ctrl-\   */
  newtio.c_cc[VERASE]       =   0;           /*   del   */
  newtio.c_cc[VKILL]         =   0;           /*   @   */
  newtio.c_cc[VEOF]           =   4;           /*   Ctrl-d   */
  newtio.c_cc[VTIME]         =   0;           /*   inter-character   timer   unused   */
  newtio.c_cc[VMIN]           =   1;           /*   blocking   read   until   1   character   arrives   */
  newtio.c_cc[VSWTC]         =   0;           /*   '\0 '   */
  newtio.c_cc[VSTART]       =   0;           /*   Ctrl-q   */  
  newtio.c_cc[VSTOP]         =   0;           /*   Ctrl-s   */
  newtio.c_cc[VSUSP]         =   0;           /*   Ctrl-z   */
  newtio.c_cc[VEOL]           =   0;           /*   '\0 '   */
  newtio.c_cc[VREPRINT]   =   0;           /*   Ctrl-r   */
  newtio.c_cc[VDISCARD]   =   0;           /*   Ctrl-u   */
  newtio.c_cc[VWERASE]     =   0;           /*   Ctrl-w   */
  newtio.c_cc[VLNEXT]