TA的每日心情 | 开心 2018-12-13 08:40 |
---|
签到天数: 138 天 连续签到: 1 天 [LV.7]常住居民III
|
1、首先在虚拟机中把USB转串口设备挂载上,如图所示,把串口的发送和接收短接:
2、编写串口设置程序:usart_config.c
#include <termios.h>
#include <stdio.h>
#include <string.h>
int set_opt(int fd,int nSpeed,int nBits,char nEvent,int nStop)
{
struct termios newtio,oldtio;
if(tcgetattr(fd,&oldtio)!=0)
{
perror("setup serial error\r");
return -1;
}
bzero(&newtio,sizeof(newtio));
newtio.c_cflag |= CLOCAL|CREAD; //CLOCAL:忽略任何调制解调器状态 CREAD:启动接收器
switch(nBits)
{
case 7:
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS7;
break;
case 8:
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS8;
break;
}
switch(nEvent)
{
case 'O':
newtio.c_cflag |= PARENB; //启用奇偶校验
newtio.c_cflag |= PARODD; //奇校验
newtio.c_iflag |=(INPCK|ISTRIP); // INPCK:收到的字符进行奇偶校验 ISTRIP: 除去奇偶校验位
break;
case 'E':
newtio.c_cflag |= PARENB; //启用奇偶校验
newtio.c_cflag &=~PARODD;
newtio.c_iflag |=(INPCK|ISTRIP); // INPCK:收到的字符进行奇偶校验 ISTRIP: 除去奇偶校验位
break;
case 'N':
newtio.c_cflag &=~ PARENB; //不使用奇偶校验
break;
}
switch(nSpeed)
{
case 2400:
cfsetispeed(&newtio,B2400);
cfsetospeed(&newtio,B2400);
break;
case 4800:
cfsetispeed(&newtio,B4800);
cfsetospeed(&newtio,B4800);
break;
case 9600:
cfsetispeed(&newtio,B9600);
cfsetospeed(&newtio,B9600);
break;
case 38400:
cfsetispeed(&newtio,B38400);
cfsetospeed(&newtio,B38400);
break;
case 460800:
cfsetispeed(&newtio,B460800);
cfsetospeed(&newtio,B460800);
break;
default:
cfsetispeed(&newtio,B9600);
cfsetospeed(&newtio,B9600);
break;
}
if(nStop == 1) //设置停止位
{
newtio.c_cflag &= ~CSTOPB;
}
else if(nStop == 2)
{
newtio.c_cflag |= CSTOPB;
}
newtio.c_cc[VTIME]=0;
newtio.c_cc[VMIN]=0;
tcflush(fd,TCIFLUSH);
//激活新配置
if((tcsetattr(fd,TCSANOW,&newtio))!=0)
{
perror("com set error");
return -1;
}
printf("set done!\n");
return 0;
}
3:编写发送程序 send.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#define MODEMDVICE "/dev/ttyUSB0"
#define STOP '#'
int main()
{
int fd,pa,c=0,res;
struct termios oldtio,newtio;
char ch,s1[2];
printf("start....\n");
fd=open(MODEMDVICE,O_RDWR|O_NOCTTY);
if(fd<0)
{
perror(MODEMDVICE);
exit(1);
}
printf("open.....\n");
int pz = set_opt(fd,38400,8,'N',1);
if(pz == 0)
{
printf("writing!!\n");
while(1)
{
while((ch=getchar())!= STOP)
{
s1[0]=ch;
res=write(fd,s1,1);
}
s1[0]=ch;
s1[1]='\n';
res=write(fd,s1,2);
break;
}
printf("close ....\n");
close(fd);
tcsetattr(fd,TCSANOW,&oldtio);
return 0;
}
else
{
close(fd);
perror("串口设置失败");
exit(1);
return -1;
}
}
4、编写makefile 文件,这里主要是练习makefile文件的使用
OBJS = send.c usart_config.c
CC = gcc
CFLAGS = -Wall -g
send.o : $(OBJS)
$(CC) $^ -o $@
5、执行 make命令
6、./send.o 如图所示
7、在当前窗口1,输入任意字符,并回车
8、重新打开另外一个终端,找到usb转串口设备,/dev/ttyUSB0,cat ttyUSB0,就会发现发送窗口发送什么,接收窗口就能接收什么字符,如图所示
|
|