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

📄 serial.c

📁 嵌入式LINUX9应用程序开发详解中串口编程实例
💻 C
字号:
//Process 1:
//ComDes = open( "/dev/ttyS0", O_RDWR );
//read( ComDes, ReadBuffer, LENGTH );

//Process 2:
//ComDes = open( "/dev/ttyS1", O_RDWR );
//write( ComDes, WriteBuffer, LENGTH );
//////////////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>   /* Standard input/output definitions */
#include <string.h>  /* String function definitions */
#include <unistd.h>  /* UNIX standard function definitions */
#include <fcntl.h>   /* File control definitions */
#include <errno.h>   /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
#include<sys/types.h>
#include<sys/stat.h>
#include <stdlib.h>

//#define BAUDRATE B300
//#define BAUDRATE B9600
//#define BAUDRATE B57600

#define MODEMDEVICE "/dev/ttyS0"
#define _POSIX_SOURCE 1

#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE;

int cnvbaudrate(char * pszbaudrate)
{
	switch(atoi(pszbaudrate))
	{
		case 50: 
			return B50;
		case 75: 
			return B75;
		case 110: 	
			return B110;
		case 134:
			return B134;
		case 150:
			return B150;
		case 200:
			return B200;
		case 300:
			return B300;
		case 600: 
			return B600;
		case 1200: 
			return B1200;
		case 1800: 
			return B1800;
		case 2400: 
			return B2400;
		case 4800: 
			return B4800;
		case 9600: 
			return B9600;
		case 19200: 
			return B19200;
		case 38400: 
			return B38400;
		case 57600: 
			return B57600;
		default:
			return B57600;
	}
}

int main(int argc,char **argv)
{
	int fd,c, res,nsize=1024,allsize=0,BAUDRATE;
	struct termios oldtio,newtio;
	char szsendbuf[1024];
	int filelength;
	FILE * pfile;
	struct stat st;
	
	fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
	if (fd <0) 
	{
		perror(MODEMDEVICE);
		printf("Error in open COM1\n"); 
		exit(-1); 
	}
	
	tcgetattr(fd,&oldtio); //save current serial port settings
	bzero(&newtio, sizeof(newtio)); // clear struct for new port settings

	//newtio.c_cflag = BAUDRATE |/* CRTSCTS |*/ CS8;// | CLOCAL | CREAD;
	BAUDRATE = B57600;
	//printf("argc= %d,argv[1]=%s\n",argc,argv[1]);
	if(argc >= 2)
		BAUDRATE = cnvbaudrate(argv[1]);
	
	cfsetispeed(&newtio,BAUDRATE);
	
	cfsetospeed(&newtio,BAUDRATE);

	newtio.c_cflag |= CRTSCTS | CS8 | CLOCAL | CREAD;
	newtio.c_iflag = IGNPAR | ICRNL;

	//newtio.c_lflag = ICANON ;//| ECHO;

	newtio.c_cc[VINTR] = 0; /* Ctrl-c*/ 
	newtio.c_cc[VQUIT] = 0; /* Ctrl-\ */
	newtio.c_cc[VERASE] = 0; /* del */
	newtio.c_cc[VKILL] = 0; /* @ */
	newtio.c_cc[VEOF] = 4; /* Ctrl-d */
	newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
	newtio.c_cc[VMIN] = 1; /* blocking read until 1 character
	arrives */
	newtio.c_cc[VSWTC] = 0; /* '\0' */
	newtio.c_cc[VSTART] = 0; /* Ctrl-q */
	newtio.c_cc[VSTOP] = 0; /* Ctrl-s */
	newtio.c_cc[VSUSP] = 0; /* Ctrl-z */
	newtio.c_cc[VEOL] = 0; /* '\0' */
	newtio.c_cc[VREPRINT] = 0; /* Ctrl-r */
	newtio.c_cc[VDISCARD] = 0; /* Ctrl-u */
	newtio.c_cc[VWERASE] = 0; /* Ctrl-w */
	newtio.c_cc[VLNEXT] = 0; /* Ctrl-v */
	newtio.c_cc[VEOL2] = 0; /* '\0' */

	tcflush(fd, TCIFLUSH);
	tcsetattr(fd,TCSANOW,&newtio);
	
	stat("test.bmp",&st);
	if((pfile=fopen("test.bmp","r"))==NULL)
	{
		printf("Can't find the file test.bmp!");
		return 0;
	}
	filelength=st.st_size;
	printf("file size :%d\n",filelength);
	//write(fd,(char *)&filelength,sizeof(int));
	while (nsize==1024)
	{
		bzero(szsendbuf,1024);
		nsize=fread(szsendbuf,1,1024,pfile);
		nsize=write(fd,szsendbuf,nsize);
		allsize+=nsize;
		if(!(allsize&0x3fff))
			printf("all_size:%d this_time:%d times:%d\n",allsize,nsize,allsize/1024);
	}
	fclose(pfile);
	//restore the old port settings 
	tcsetattr(fd,TCSANOW,&oldtio);
	close(fd);
}

⌨️ 快捷键说明

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