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

📄 akiserial.h

📁 linux下串口通信例子
💻 H
字号:
//#include <stdio.h>//#include <string.h>//#include <sys/types.h>//#include <errno.h>//#include <sys/stat.h>//#include <fcntl.h>//#include <unistd.h>//#include <termios.h>//#include <stdlib.h>//#include "akiserial.h"/***************************** * 功能:设置串口函数 * 入口:(fd,波特率,数据位,奇偶校验,停止位) *****************************/int set_opt(int fd,int nSpeed,int nBits,char nEvent,int nStop){	struct termios newtio,oldtio;	/*保存测试现有串口参数设置,在这里如果串口号出错,会有相关的出错信息*/	if(tcgetattr(fd,&oldtio)!=0) {		perror("SetupSerial 1");		return -1;	}	bzero(&newtio,sizeof(newtio));	/*步骤一:设置字符大小*/	newtio.c_cflag |= CLOCAL | CREAD;	newtio.c_cflag &= ~CSIZE;	/*设置停止位*/	switch(nBits) {		case 7:	newtio.c_cflag |= CS7;				break;		case 8:	newtio.c_cflag |= CS8;				break;	}	/*设置奇偶校验位*/	switch(nEvent) {		case 'O':	//奇数					newtio.c_cflag |= PARENB;					newtio.c_cflag |= PARODD;					newtio.c_iflag |= (INPCK | ISTRIP);					break;		case 'E':	//偶数					newtio.c_iflag |= (INPCK | ISTRIP);					newtio.c_cflag |= PARENB;					newtio.c_cflag &= ~PARODD;										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 115200:						cfsetispeed(&newtio,B115200);					cfsetospeed(&newtio,B115200);					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\n");		return -1;	}	//printf("Set Done!\n");	return 0;}/***************************** * 功能:打开串口函数 *****************************/int open_port(int fd,int comport){	char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2","/dev/ttyS3","/dev/ttyS4","/dev/ttyS5","/dev/ttyS6","/dev/ttyS7"};	long vdisable;		fd=open(dev[comport-1],O_RDWR|O_NOCTTY|O_NDELAY);	if(fd==-1) {		perror("Can't Open Serial Port\n");		return -1;	}	/*恢复串口为阻塞状态*/	if(fcntl(fd,F_SETFL,0)<0) {		printf("fcntl failed!\n");	}	else printf("fcntl=%d\n",fcntl(fd,F_SETFL,0));	/*测试是否为终端设备*/	if(isatty(STDIN_FILENO)==0) {		printf("standard input is not a terminal device\n");	}	else printf("isatty success!\n");	printf("fd-open=%d\n",fd);	return fd;}/***************************** * 功能:16进制ascii字符转数值  * [例]'A'转换后是0x0a *****************************/char Hex2Char(char c){	if((c>='0')&&(c<='9'))		return c-0x30;	else if((c>='A')&&(c<='F'))		return c-'A'+10;	else if((c>='a')&&(c<='f'))		return c-'a'+10;	else 		return 0x10;}

⌨️ 快捷键说明

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