⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux-serial.c

📁 用于linux系统中实现ARM开发板与上位机之间的串行通信
💻 C
字号:
#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/tts/0", O_RDWR | O_NOCTTY);    //默认为阻塞读方式
     if(fd == -1)
          perror("open serial 0\n");
 
     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_iflag &=~ICRNL;
     opt.c_iflag &=~INLCR;
    
     opt.c_cc[VTIME] = 150;
     opt.c_cc[VMIN] = 1;
    
     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);
          bzero(write_buf,sizeof write_buf);
 
          while( (n = read(fd, read_buf, 14)) > 0 )
          {
               for(i=len; i<(len+n); i++)
               {
                    write_buf[i] = read_buf[i-len];
               }
               len += n;
               if(len == 14)    //读完全部14个数据就结束
                    break;
          }
 
          for(i=0; i<len; i++)
               printf("%d ",write_buf[i]);
 
          n = write(fd, write_buf, len);
          printf("write %d chars\n",n);
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -