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

📄 chuankou.c

📁 把S3C2440的ADC串口实现 把S3C2440传过来的数据读出来 然后送给串口 代码的功能是把串口参数先设好
💻 C
字号:
#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>


//打开串口函数
//fd:为串口描述符
//comport: 串口号
int open_port(int fd,int comport)
{
	long vdisable;
	if(comport==1) //串口1
	{	fd=open("/dev/tty",O_RDWR);
		if(-1==fd)
		{	perror("Can't Open Serial Port");
			return (-1);
		}
	}
	else if(comport==2) //串口2
	{	fd=open("/dev/ttyS1",O_RDWR|O_NOCTTY|O_NDELAY);
		if(-1==fd)
		{	perror("Can't Open Serial Port");
			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;
}


//设置串口波特率参数
//fd:为串口描述符
//nSpeed:每秒传输位数
//nBits:数据位
//nEvent:有无奇偶校验
//nStop:停止位
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");
		return -1;
	}

	printf("set done!\n");
	return 0;
}



int main(void)
{
	int fd_tty,i;
	int fd;
	int ret;
	char data[36];
	int tmp = 1000;
	int v;
	char ttydata[11];
	
//打开串口
	if((fd_tty=open_port(fd_tty,1))<0)
	{
		perror("open_port error");
		return -1;
	}

//初始化设置串口
	if((i=set_opt(fd_tty,115200,8,'N',1))<0)
	{
		perror("set_opt error");
		return -1;
	}



 	fd=open("/dev/adc",O_RDWR);
  
	if(fd==-1)
	{
    		perror("error open\n");
   		exit(-1);
	}
	printf("open /dev/adc successfully\n");
   
	while(tmp--){
		ret=read(fd,data,4);	
		if(ret==-1)
		{
  			perror("read error\n");
			exit(-1);	
		}
/*		v = (*(int *)data)&0x3ff;
		for(i = 9; i >= 0; i--){
			ttydata[i] = (char)(v&0x1);
			v = v >> 1;
		}
		ttydata[10] = '\0';
		printf("read successfully:%s\n",ttydata);
*/		write(fd_tty,data,4);	
		sleep(1);
	}
	close(fd);
	close(fd_tty);

	return 0;
} 


⌨️ 快捷键说明

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