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

📄 rs232-test.c

📁 ARM9200+嵌入式linux下串口通信程序
💻 C
字号:
/************************************************ *  serial communication demo *  by Zou jian guo <ah_zou@163.com>    *  2003-12-22 **************************************************/#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <stdlib.h>#include <termios.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#define BAUDRATE B115200#define COM0 "/dev/ttyS0"#define COM1 "/dev/ttyS1"#define COM2 "/dev/ttyS2"#define COM3 "/dev/ttyS3"#define COM4 "/dev/ttyS4"#define ENDMINITERM 27 /* ESC to quit miniterm */#define FALSE 0#define TRUE 1static int STOP=FALSE;static int fd;void ctl_c_handler(int signo){  	printf("quit !!!\n");   	STOP=TRUE;	exit(0);}/*--------------------------------------------------------*/void* keyboard(void * data){    int c;	for (;;){		c=getchar();      	if( c== ENDMINITERM){        	STOP=TRUE;        	break ;      	}	}    return NULL;}/*--------------------------------------------------------*//* modem input handler */void* receive(void * data){	int c;  	printf("read modem\n");  	while (STOP==FALSE)   	{    	read(fd,&c,1); /* com port */ 	  	//write(fd,&c,1); /* stdout */     	putchar(c);/* stdout */  	}  	printf("exit from reading modem\n");  	return NULL; }int send_ascii(){	char c=0;	int i;	while (STOP==FALSE) /* modem input handler */  	{    	c++;		for(i=0;i<0x1000; i++);		write(fd,&c,1); /* stdout */  	}  	return 0; 		}/*--------------------------------------------------------*/void* send(void * data){  	int c='0';  	printf("send data\n");		send_ascii();	return ;  	while (STOP==FALSE) /* modem input handler */  	{    	c=getchar();		write(fd,&c,1); /* stdout */  	}  	return NULL; }/*--------------------------------------------------------*/int main(int argc,char** argv){	struct termios oldtio,newtio,oldstdtio,newstdtio;	struct sigaction sa;	int ok,num; 	pthread_t th_a, th_b, th_c; 	void * retval;	char *COM[5]={		"/dev/ttyS0",		"/dev/ttyS1",		"/dev/ttyS2",		"/dev/ttyS3",		"/dev/ttyS4",	};	//	printf("argc=%d\n",argc);	if(argc<2){		printf("Usage: %s [0-4] w|r \n",argv[0]);		printf("       0-4 is ttyS0-ttyS4 \n");		printf("       w : write to ttyS\n");		printf("       r : read from ttyS \n");		printf("       no 'w|r'  is both  read and write\n");		return 0;	}	num = atoi(argv[1]);	printf("num=%d %s\n",num,COM[num]);	if(num>4 || num<0){		printf("Port number must be 0 to 4! \n");		return -1;	}   	fd = open(COM[num], O_RDWR );	if (fd <0) {    	perror(COM[num]);    	exit(-1);  	}	  	tcgetattr(0,&oldstdtio);  	tcgetattr(fd,&oldtio); /* save current modem settings */  	tcgetattr(fd,&newstdtio); /* get working stdtio *///	newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;/*ctrol flag*/	newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;/*ctrol flag*/	newtio.c_iflag = IGNPAR; /*input flag*/	newtio.c_oflag = 0;		/*output flag*/ 	newtio.c_lflag = 0; 	newtio.c_cc[VMIN]=1;	newtio.c_cc[VTIME]=0; /* now clean the modem line and activate the settings for modem */ 	tcflush(fd, TCIFLUSH);	tcsetattr(fd,TCSANOW,&newtio);/*set attrib	  */ // 	sa.sa_handler = child_handler;//  	sa.sa_flags = 0;		sigaction(SIGINT,&ctl_c_handler,NULL); /* handle dying child */	  	pthread_create(&th_a, NULL, keyboard, 0);  	if(argc>2){		if(strcmp(argv[2],"r")==0){			pthread_create(&th_b, NULL, receive, 0);		}		if(strcmp(argv[2],"w")==0){			pthread_create(&th_c, NULL, send, 0);		}	}	else{  		pthread_create(&th_b, NULL, receive, 0);		pthread_create(&th_c, NULL, send, 0);	}		pthread_join(th_a, &retval);  	pthread_join(th_b, &retval);  	pthread_join(th_c, &retval);  	tcsetattr(fd,TCSANOW,&oldtio); /* restore old modem setings */  	tcsetattr(0,TCSANOW,&oldstdtio); /* restore old tty setings */  	close(fd);  	exit(0); }

⌨️ 快捷键说明

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