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

📄 user_define_func.c,v

📁 linux下的串口通讯
💻 C,V
📖 第 1 页 / 共 3 页
字号:
head	1.13;access;symbols;locks; strict;comment	@ * @;1.13date	2004.12.17.03.36.49;	author yr;	state Exp;branches;next	1.12;deltatype	text;permissions	644;commitid	89441c2544d562b;kopt	kv;filename	@user_define_func.c@;1.12date	2004.12.16.09.13.47;	author yr;	state Exp;branches;next	1.11;deltatype	text;permissions	644;commitid	60441c151c409e6;kopt	kv;filename	@user_define_func.c@;1.11date	2004.12.14.08.14.36;	author yr;	state Exp;branches;next	1.10;deltatype	text;permissions	644;commitid	1ba841bea0e84060;kopt	kv;filename	@user_define_func.c@;1.10date	2004.12.14.07.55.08;	author yr;	state Exp;branches;next	1.9;deltatype	text;permissions	644;commitid	1b4c41be9c573176;kopt	kv;filename	@user_define_func.c@;1.9date	2004.12.13.02.33.02;	author yr;	state Exp;branches;next	1.8;deltatype	text;permissions	644;commitid	85041bcff596cce;kopt	kv;filename	@user_define_func.c@;1.8date	2004.12.07.11.27.11;	author laj;	state Exp;branches;next	1.7;deltatype	text;permissions	644;commitid	96441b593733089;kopt	kv;filename	@user_define_func.c@;1.7date	2004.12.07.10.15.35;	author laj;	state Exp;branches;next	1.6;deltatype	text;permissions	644;commitid	7ac41b582727902;kopt	kv;filename	@user_define_func.c@;1.6date	2004.12.06.13.42.25;	author yr;	state Exp;branches;next	1.5;deltatype	text;permissions	644;commitid	8e441b46185497f;kopt	kv;filename	@user_define_func.c@;1.5date	2004.11.30.08.26.02;	author tarbit;	state Exp;branches;next	1.4;deltatype	text;permissions	644;commitid	cb041ac2e890319;kopt	kv;filename	@user_define_func.c@;1.4date	2004.11.30.07.56.24;	author tarbit;	state Exp;branches;next	1.3;deltatype	text;permissions	644;commitid	d3c41ac27976c6b;kopt	kv;filename	@user_define_func.c@;1.3date	2004.11.30.02.43.39;	author yr;	state Exp;branches;next	1.2;deltatype	text;permissions	644;commitid	c3c41abde567d33;kopt	kv;filename	@user_define_func.c@;1.2date	2004.11.30.01.59.15;	author yr;	state Exp;branches;next	1.1;deltatype	text;permissions	644;commitid	ce041abd3ee5b38;kopt	kv;filename	@user_define_func.c@;1.1date	2004.11.01.05.19.55;	author yr;	state Exp;branches;next	;deltatype	text;permissions	644;commitid	d404185c7771af5;kopt	kv;filename	@user_define_func.c@;desc@@1.13log@change mtype of regist, REG_SERIALSERV@text@#include <stdio.h>      /*标准输入输出定义*/#include <stdlib.h>     /*标准函数库定义*/#include <unistd.h>     /*Unix 标准函数定义*/#include <sys/types.h>#include <sys/msg.h>#include <sys/ipc.h>#include <sys/stat.h>#include <fcntl.h>      /*文件控制定义*/#include <termios.h>    /*PPSIX 终端控制定义*/#include <errno.h>      /*错误号定义*/#include <string.h>#include <pthread.h>   #include <signal.h>#include <time.h>#include <Message.h>#include <Register.h>#include <alarm_num.h>/***@@brief  设置串口通信速率*@@param  fd     类型 int  打开串口的文件句柄*@@param  speed  类型 int  串口速度*@@return  void*/extern  char    alarm_set[3];extern 	char	alarm_bit[3];extern 	char 	alarm_num;extern	char 	alarm_kind;int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,					B38400, B19200, B9600, B4800, B2400, B1200, B300, };int name_arr[] = {38400,  19200,  9600,  4800,  2400,  1200,  300, 38400,  					19200,  9600, 4800, 2400, 1200,  300, };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 fd1");  				return;     			}    			tcflush(fd,TCIOFLUSH);   		}  	}}/***@@brief   设置串口数据位,停止位和效验位*@@param  fd     类型  int  打开的串口文件句柄*@@param  databits 类型  int 数据位   取值 为 7 或者8*@@param  stopbits 类型  int 停止位   取值为 1 或者2*@@param  parity  类型  int  效验类型 取值为N,E,O,,S*/int set_Parity(int fd,int databits,int stopbits,int parity){ 	struct termios options; 	if  ( tcgetattr( fd,&options)  !=  0) { 		perror("SetupSerial 1");     		return(0);  	}	options.c_cflag &= ~CSIZE; 	switch (databits) /*设置数据位数*/	{   	case 7:				options.c_cflag |= CS7; 		break;	case 8:     		options.c_cflag |= CS8;		break;   	default:    		fprintf(stderr,"Unsupported data size\n"); 		return 0;  	}       switch (parity)        {   	case 'n':	case 'N':    		options.c_cflag &= ~PARENB;   /* Clear parity enable */		options.c_iflag &= ~INPCK;     /* Enable parity checking */ 		break;  	case 'o':   	case 'O':     		options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/  		options.c_iflag |= INPCK;             /* Disnable parity checking */ 		break;  	case 'e':  	case 'E':   		options.c_cflag |= PARENB;     /* Enable parity */    		options.c_cflag &= ~PARODD;   /* 转换为偶效验*/     		options.c_iflag |= INPCK;       /* Disnable parity checking */		break;	case 'S': 	case 's':  /*as no parity*/   	    	options.c_cflag &= ~PARENB;		options.c_cflag &= ~CSTOPB;		break;  	default:   		fprintf(stderr,"Unsupported parity\n");    		return 0;  	}  #if 0	options.c_iflag &= 1;#endif	options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);	options.c_oflag &= ~OPOST;	/* 设置停止位*/          switch (stopbits)        {   	case 1:    		options.c_cflag &= ~CSTOPB;  		break;  	case 2:    		options.c_cflag |= CSTOPB;  	   	break;	default:    		 fprintf(stderr,"Unsupported stop bits\n");  		 return 0;         } 	/* Set input parity option */         if (parity != 'n')   		options.c_iflag |= INPCK;         tcflush(fd,TCIFLUSH);        options.c_cc[VTIME] = 150; /* 设置超时15 seconds*/           options.c_cc[VMIN] = 0; /* Update the options and do it NOW */        if (tcsetattr(fd,TCSANOW,&options) != 0)           { 		perror("SetupSerial 3");   		return 0;          } 	return 1;  }/**********************************************************************代码说明:使用串口二测试的,发送的数据是字符,但是没有发送字符串结束符号,所以接收到后,后面加上了结束符号。我测试使用的是单片机发送数据到第二个串口,测试通过。**********************************************************************/#define FALSE 0 #define TRUE  1 /*********************************************************************/int OpenDev(char *Dev){	int	fd = open( Dev, O_RDWR );         //| O_NOCTTY | O_NDELAY		if (-1 == fd)		{ 					perror("Can't Open Serial Port");		return -1;			}		else			return fd;}//------------------------------------------------------------------------------------------------------------void handle_func(){        printf("End of serial!\n");        _exit(0);}//------------------------------------------------------------------------------------------------------------void func_msg_regst(){	//regist message!!        MSG     sendmsg;        key_t keyval0 = SERVMANAGE_MSGQ;        int msgq_id0 = 0;         msgq_id0 = msgget(keyval0,0);                                                                                                                       sendmsg.mtype           = REG_SERIALSERV;        sendmsg.pid             = getpid();        sendmsg.from_service    = SERIAL_SERVICE;        sendmsg.data_type       = REGIST;        sendmsg.msg_data.answer_serv=0x00;        msgsnd(msgq_id0, &sendmsg, MSG_LEN, 0);	}//------------------------------------------------------------------------------------------------------------void func_sig_proc(){	//signal processor!        struct sigaction act;        sigset_t blockmask;                                                                                                                       sigemptyset(&blockmask);        sigaddset(&blockmask, SIGINT);        sigprocmask(SIG_BLOCK, &blockmask, NULL);        act.sa_handler = handle_func;        sigemptyset(&act.sa_mask);        sigaddset(&act.sa_mask, SIGINT);        sigaction(SIGINT, &act, NULL);        sigprocmask(SIG_UNBLOCK,&blockmask, NULL);}//------------------------------------------------------------------------------------------------------------void func_sign_nack(){	printf("The 485 is disconnected!\n");}//------------------------------------------------------------------------------------------------------------void func_sigalarm_proc(){	struct sigaction act;        sigset_t blockmask;                                                                                                                       sigemptyset(&blockmask);        sigaddset(&blockmask, SIGALRM);        sigprocmask(SIG_BLOCK, &blockmask, NULL);        act.sa_handler = func_sign_nack;        sigemptyset(&act.sa_mask);        sigaddset(&act.sa_mask, SIGALRM);        sigaction(SIGALRM, &act, NULL);        sigprocmask(SIG_UNBLOCK,&blockmask, NULL);}//------------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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