天天看点

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

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

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

首先是开发板即发送端:

#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;

}

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

#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;  

}