使用开发板与虚拟机进行串口数据传输(文件传输)

版权声明:未经本人同意不得转载 https://blog.csdn.net/weixin_40532940/article/details/82744428

这里我们设置开发板为发送端,虚拟机或者电脑为接收端。(如果相反只要改一下设备名称和一些传输的方式就行了)

除此之外就是如何编写Makefile的一些问题,其余有什么问题可以咨询QQ:2821072611,随时解答。

首先是开发板即发送端:

/**********server.c***********/
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <termios.h>
#include <stdlib.h>
#include <string.h>
#include<unistd.h>
#define BAUDRATE B9600
#define MODEMDEVICE "/dev/ttySAC0"//这里根据开发板的串口的接口设置
#define STOP '@'
#define MAX   128
int main(){
    //定义一些 终端结构体,线路状态属性的设置
    int fd,c=0,res;
    struct termios oldtio,newtio;
    char ch,s1[20];
    printf("start..\n");
    fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);
    if(fd<0)
    {
        perror(MODEMDEVICE);
        exit(1);
    }
    printf("open...\n");
    tcgetattr(fd,&oldtio);
    bzero(&newtio,sizeof(newtio));
    newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
    newtio.c_iflag = IGNPAR;
    newtio.c_oflag = 0;

    newtio.c_lflag = ICANON;
    tcflush(fd,TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);
    printf("write...\n");

       int fi,fo;
       
       //打开这两个文件,如果没有,那么就创建文件,fo是用来测试的文件可以不用看
       fi = open("uartData.txt",O_RDWR|O_CREAT);
       fo = open("out.txt",O_RDWR|O_CREAT);


       char a[100];
       int i=0,size; 
       size = read(fi,a,100);

printf("%s",a);
       write(fd,a,size);//写进串口
        write(fo,a,size);//可以不用看,我是看能否把缓冲区的数据写入文件中的

    printf("close..\n");
    close(fd);
    tcsetattr(fd,TCSANOW,&oldtio);
    return 0;
}
 

然后是虚拟机或者主机,我们设置为接收端:

/**************client.c***************/  
#include<stdio.h>  
#include<sys/types.h>  
#include<fcntl.h>  
#include<termios.h>  
#include<stdlib.h>
#include<string.h>
#include<sys/stat.h>
#include<errno.h>
#define BAUDRATE B9600  //设置波特率
#define MODEMDEVICE "/dev/ttyS1"//这里要看电脑上虚拟机的串口对应的计算机所连接的物理串口
int main()  
{  
    
    //定义一些串口文件,中断结构体,线路规程的设置,还有一些状态属性
    int fd,c=0,res;  
    struct termios oldtio,newtio;  
    char buf[256];  
    printf("start ...\n");  
    fd=open(MODEMDEVICE,O_RDWR | O_NOCTTY);  
    if(fd<0)  
    {  
      perror(MODEMDEVICE);  
      exit(1);  
    }  
    printf("open...\n");  
    tcgetattr(fd,&oldtio);  
    bzero(&newtio,sizeof(newtio));  
    newtio.c_cflag=BAUDRATE | CS8 | CLOCAL | CREAD;  
    newtio.c_iflag=IGNPAR;  
    newtio.c_oflag=0;  
    newtio.c_lflag=ICANON;  
    tcflush(fd,TCIFLUSH);  
    tcsetattr(fd,TCSANOW,&newtio);  
    printf("reading...\n");
 
int fo;
fo = open("/uartData.txt",O_CREAT|O_RDWR);//打开或者创建文件
if(fo<0){perror("error!");}
char a[100];
while(1){
read(fd,a,1);//将串口中的数据写入文件中来

printf("%s",a);
write(fo,a,1);}

       printf("close...\n");  
       close(fd);  
       tcsetattr(fd,TCSANOW,&oldtio);  
       return 0;  
}  

猜你喜欢

转载自blog.csdn.net/weixin_40532940/article/details/82744428