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

📄 test.c

📁 linux下串口通信的测试程序
💻 C
字号:
#include<stdio.h>               /*标准输入输出定义*/#include<sys/ioctl.h>#include<time.h>#include<unistd.h>             /*UNIX标准函数定义*/#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>             /*文件控制定义*/#include<stdlib.h>            /*标准函数库定义*/#include<termios.h>           /*PPSIX终端控制定义*/#include<errno.h>             /*错误号定义*/#include<sys/select.h>        /*kbhit函数用到它*/#include<stropts.h>           /*同上*/#include<string.h>#define SPEED 115200#define SIZE 512unsigned int speed_arr[]={B115200,B57600,B38400,B19200,B9600,B4800,B2400,B1800,B1200,B600,B300,B200,B150,B134,B110,B75,B50,B0};unsigned int name_arr[]={115200,57600,38400,19200,9600,4800,2400,1800,1200,600,300,200,150,134,100,75,50,0};char *dev = "/dev/ttyS0";int open_port(void);void set_speed(int fd,int speed);void set_mode(int fd);void read_port(int fd);void write_port(int fd);int kbhit(void);int main(void){	int fd;	int i;		fd=open_port();                                             /*打开串口设备文件*/  	//set_speed(fd,SPEED);                                        /*设置串口波特率*/ 	set_mode(fd);                                               /*将通讯方式设为原始模式(Raw Mode)*/	set_speed(fd,SPEED);                                        /*设置串口波特率*/		printf("read\tpress 1\nwrite\tpress 2\n");	scanf("%d",&i);	getchar();	if(i==1)		read_port(fd);	else		write_port(fd);		close(fd);		return 0;}int kbhit(void){	 static const int STDIN = 0;	 static int initialized=0;	 if (! initialized)	 {		  // Use termios to turn off line buffering	          struct termios term;	         tcgetattr(STDIN, &term);	         term.c_lflag &= ~ICANON;	         tcsetattr(STDIN, TCSANOW, &term);	         setbuf(stdin, NULL);	         initialized = 1;	 }	 int bytesWaiting;	 ioctl(STDIN, FIONREAD, &bytesWaiting);		return bytesWaiting;}int open_port(void){	int fd;			fd=open(dev,O_RDWR | O_NOCTTY | O_NONBLOCK);//	printf("fd=%d\n",fd);		if(fd==-1)	{		perror("Can't Open SerialPort");	}		return fd;	}	void set_speed(int fd,int speed){	int i;	int status;	struct termios Opt;	tcgetattr(fd,&Opt);	for(i=0;i<sizeof(speed_arr)/sizeof(int);i++)	{		if(speed==name_arr[i])		{			tcflush(fd,TCIOFLUSH);			cfsetispeed(&Opt,speed_arr[i]);			cfsetospeed(&Opt,speed_arr[i]);			status=tcsetattr(fd,TCSANOW,&Opt);						if(status!=0)			{				perror("tcsetattr fd");				return;			}			tcflush(fd,TCIOFLUSH);		}	}}			void set_mode(int fd){	struct termios options;	if (tcgetattr(fd,&options) != 0)	{		perror("SetupSerial Error");		return;	}	 options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);         /*设置INPUT*/	 options.c_oflag &= ~OPOST;                                  /*设置OUTPUT*/	}void read_port(int fd){	int nread;	char buff[SIZE];		while(!kbhit())	{		while((nread=read(fd,buff,SIZE))>0)		{			printf("\nLen %d\n",nread);			buff[nread+1]='\0';						printf("\n%s",buff);		}	}}void write_port(int fd){	char buff[SIZE];		while(strcmp(buff,"quit"))	{	//	fgets(buff,SIZE,stdin);		scanf("%s",&buff);		if(write(fd,buff,strlen(buff))==-1)		{			perror("Write SerialPort Error");		}	}}

⌨️ 快捷键说明

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