串口发送函数
===========================================================================================
/******************头文件定义******************/
#include
#include
#include
#include
#include
#include
#include
#include
#define max_buffer_size 100 /*定义缓冲区最大宽度*/
/*******************************************/
int fd; /*定义设备文件描述符*/
int open_serial(int k)
{
if(k==0) /*串口选择*/
{
fd = open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY); /*读写方式打开串口*/
}
else
{
perror("can't open /dev/ttyS");
return(-1);
}
if(fd == -1) /*打开失败*/
{
perror("can't open /dev/ttyS0");
return -1;
}
else
return 0;
}
/********************************************************************/
int main(int argc, char *argv[ ] )
{
char sbuf[]={"Hello,this is a Serial_Port test!\n"};/*待发送的内容,以\n 为结束标志*/
int sfd,retv,i;
struct termios newtio,oldtio;
int length=sizeof(sbuf);/*发送缓冲区数据宽度*/
/*******************************************************************/
open_serial(0); /*打开串口1*/
/*******************************************************************/
printf("ready for sending data...\n"); /*准备开始发送数据*/
if(tcgetattr(fd,&oldtio)!=0)
{
perror("SetupSerial 1");
return -1;
}
/*bzero( &newtio, sizeof(newtio));
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag | =CS8; */
cfmakeraw(&newtio); //一步到位全部设置好
/*****************************************************************/
cfsetispeed(&newtio,B115200); /*波特率设置为115200bps*/
cfsetospeed(&newtio,B115200);
/*******************************************************************/
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");
/*******************************************************************/
retv=write(fd,sbuf,length); /*接收数据*/
if(retv==-1)
{
perror("write");
}
printf("the number of char sent is %d\n",retv);
if(close(fd)!=0) /*判断是否成功关闭文件*/
{
perror("Close the Device failur!\n");
return 0;
}
}
/****************************结束***********************************/
串口接收函数
============================================================================
/*********************头文件定义***********************/
#include
#include
#include
#include
#include
#include
#include
#include
#include "math.h"
#define max_buffer_size 100 /*定义缓冲区最大宽度*/
int fd; /*定义设备文件描述符*/
int open_serial(int k)
{
if(k==0) /*串口选择*/
{
fd = open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY); /*读写方式打开串口*/
}
else
{
perror("can't open /dev/ttyS");
return(-1);
}
if(fd == -1) /*打开失败*/
{
perror("can't open /dev/ttyS0");
return -1;
}
else
return 0;
}
int main(int argc, char *argv[ ] )
{
char hd[max_buffer_size],*rbuf; /*定义接收缓冲区*/
int retv,i,ncount=0;
struct termios newtio,oldtio;
/*******************************************************************/
open_serial(0); /*打开串口1*/
/*******************************************************************/
if(tcgetattr(fd,&oldtio)!=0)
{
perror("SetupSerial 1");
return -1;
}
cfmakeraw(&newtio); //一步到位全部设置好
/*****************************************************************/
cfsetispeed(&newtio,B115200); /*波特率设置为115200bps*/
cfsetospeed(&newtio,B115200);
/*******************************************************************/
newtio.c_cc[VTIME] = 0; /*设置接收条件*/
newtio.c_cc[VMIN] = 0;
if((tcsetattr(fd,TCSANOW,&newtio))!=0)
{
perror("com set error");
return -1;
}
printf("set done!\n");
rbuf=hd; /*数据保存*/
printf("ready for receiving data...\n");
retv=read(fd,rbuf,1); /*接收数据*/
if(retv==-1)
{
perror("read error"); /*读状态标志判断*/
}
/*************************开始接收数据******************************/
while(*rbuf!='\n') /*判断数据是否接收完毕*/
{
ncount++;
rbuf++;
retv=read(fd,rbuf,1);
if(retv==-1)
{
perror("read error");
}
}
/*******************************************************************/
printf("The data received is:\n"); /*输出接收到的数据*/
for(i=0;i{
printf("%c",hd[i]);
}
printf("\n");
if(close(fd)!=0) /*判断是否成功关闭文件*/
{
perror("Close the Device failur!\n");
return 0;
}
}
/****************************结束***********************************/
阅读(1524) | 评论(0) | 转发(0) |