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

📄 r.txt

📁 一个非常好的嵌入式串口读程序
💻 TXT
字号:
//
//	Description
//		COM receive and printf
//
//	Copyright (C) 2004  EmsysChina Co.,Ltd
//
//	Author: Cham Liu<liuzh@emsyschina.com>
//
//	History:
//
//	2009.03.12  Cham Liu<liuzh@emsyschina.com>
//               Original version


#include     <stdio.h>      
#include     <stdlib.h>    
#include     <unistd.h>     
#include     <sys/types.h>  
#include     <sys/stat.h>   
#include     <fcntl.h>     
#include     <termios.h>   
#include     <errno.h>     
#include     <string.h>


typedef unsigned char U8;
typedef unsigned short U16;
typedef unsigned long U32;

#define  CMSPAR 010000000000
void setTermios(struct termios * pNewtio, U16 uBaudRate)
{
	bzero(pNewtio, sizeof(struct termios)); /* clear struct for new port settings */

	//8N1
	//pNewtio->c_cflag = uBaudRate | CS8 |  CREAD | CLOCAL;
	//pNewtio->c_iflag = IGNPAR;
	
	//8E1
	//pNewtio->c_cflag = uBaudRate | CS8 |  CREAD | CLOCAL |PARENB;
	//pNewtio->c_iflag = 0;
	
	//8O1
	//pNewtio->c_cflag = uBaudRate | CS8 |  CREAD | CLOCAL |PARENB | PARODD;
	//pNewtio->c_iflag = 0;
	
	//8S1
	//pNewtio->c_cflag = uBaudRate | CS8 |  CREAD | CLOCAL |PARENB | CMSPAR;
	//pNewtio->c_iflag = 0;
	
	//8M1
	pNewtio->c_cflag = uBaudRate | CS8 |  CREAD | CLOCAL |PARENB | PARODD | CMSPAR;
	pNewtio->c_iflag = 0;
	
	pNewtio->c_oflag = 0;
	pNewtio->c_lflag = 0; //non ICANON
	/* 
	initialize all control characters 
	default values can be found in /usr/include/termios.h, and 
	are given in the comments, but we don't need them here
	*/
	pNewtio->c_cc[VINTR]    = 0;     /* Ctrl-c */ 
	pNewtio->c_cc[VQUIT]    = 0;     /* Ctrl-\ */
	pNewtio->c_cc[VERASE]   = 0;     /* del */
	pNewtio->c_cc[VKILL]    = 0;     /* @ */
	pNewtio->c_cc[VEOF]     = 4;     /* Ctrl-d */
	pNewtio->c_cc[VTIME]    = 5;     /* inter-character timer, timeout VTIME*0.1 */
	pNewtio->c_cc[VMIN]     = 0;     /* blocking read until VMIN character arrives */
	pNewtio->c_cc[VSWTC]    = 0;     /* '\0' */
	pNewtio->c_cc[VSTART]   = 0;     /* Ctrl-q */ 
	pNewtio->c_cc[VSTOP]    = 0;     /* Ctrl-s */
	pNewtio->c_cc[VSUSP]    = 0;     /* Ctrl-z */
	pNewtio->c_cc[VEOL]     = 0;     /* '\0' */
	pNewtio->c_cc[VREPRINT] = 0;     /* Ctrl-r */
	pNewtio->c_cc[VDISCARD] = 0;     /* Ctrl-u */
	pNewtio->c_cc[VWERASE]  = 0;     /* Ctrl-w */
	pNewtio->c_cc[VLNEXT]   = 0;     /* Ctrl-v */
	pNewtio->c_cc[VEOL2]    = 0;     /* '\0' */
}

#define BUFSIZE 512
int main(int argc, char **argv)
{
	int fd;
	int nread;
	char buff[BUFSIZE];
	struct termios oldtio,newtio;
   	struct timeval tv;
	char *dev ="/dev/ttyS1";
	fd_set rfds;
	
	if ( (fd = open(dev,O_RDWR | O_NOCTTY ))<0)
	{
		printf("Can't Open Serial Port!\n");
		return -1;
	}

	tcgetattr(fd,&oldtio); /* save current serial port settings */
	setTermios(&newtio,B115200);

	tcflush(fd, TCIFLUSH);
	tcsetattr(fd,TCSANOW,&newtio);


	tv.tv_sec=30;
	tv.tv_usec=0;
	while(1)
  	{
		FD_ZERO(&rfds);
		FD_SET(fd,&rfds);
		if (select(1+fd,&rfds,NULL,NULL,&tv)>0)
		{
			if(FD_ISSET(fd,&rfds))
			{	
				nread=read(fd, buff, BUFSIZE);
				printf("readlength=%d\n",nread);
				buff[nread]='\0';
				printf("%s\n",buff);
			}
		}
  	}
	tcsetattr(fd,TCSANOW,&oldtio);
    close(fd);
}

⌨️ 快捷键说明

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