一个linux 下C的串口程序 用别人的例子修改

一个linux 下C的串口程序 用别人的例子修改

/****************************************************************
gcc maintest.c -o maintest -lc -lm  //编译程序
gcc main.c -o main.so -shared -lc -lm  //编译so文件

****************************************************************/
#include     <stdio.h>      /*标准输入输出定义*/
#include     <stdlib.h>     /*标准函数库定义*/
#include     <unistd.h>     /*Unix标准函数定义*/
#include     <sys/types.h>  /**/
#include     <sys/stat.h>   /**/
#include     <fcntl.h>      /*文件控制定义*/
#include     <termios.h>    /*PPSIX终端控制定义*/
#include     <errno.h>      /*错误号定义*/

#define FALSE 0
#define TRUE   1

/***@brief  设置串口通信速率
*@param  fd     类型 int  打开串口的文件句柄
*@param  speed  类型 int  串口速度
*@return  void*/

int speed_arr[] = {B57600,B38400, B19200, B9600, B4800, B2400, B1200, B300};
int name_arr[] = {57600,38400,  19200,  9600,  4800,  2400,  1200,  300};

/**
*@brief   设置串口数据位,停止位和效验位
*@param  fd     类型  int  打开的串口文件句柄*
*@param speed 类型 int 波特率
*@param  databits 类型  int 数据位   取值 为 7 或者8*
*@param  stopbits 类型  int 停止位   取值为 1 或者2*
*@param  parity  类型  int  效验类型 取值为N,E,O,,S

*/

int set_Parity(int fd,int speed,int databits,int stopbits,int parity)
{
 int i;
 struct termios options;


 tcgetattr(fd, &options );
 bzero( &options, sizeof(struct termios ) );
       for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++)
       {
          if  (speed == name_arr[i])
      {
         options.c_cflag = speed_arr[i] | CRTSCTS | CS8 | CLOCAL | CREAD;
      }
      }

    options.c_oflag  &= ~OPOST;
    //options.c_oflag = 0;
    //超时时间
    options.c_cc[VTIME] =20;
    //超时设置
    options.c_cc[VMIN]  =0;

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

}

/**
*@breif 打开串口
*/
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR );         //| O_NOCTTY | O_NDELAY
 if (-1 == fd)
  { /*设置数据位数*/
   perror("Can't Open Serial Port");
   return -1;
  }
 else
 return fd;

}

/**
*@breif 关闭串口
*/
int CloseDev(int  Anfd)
{
 if  (-1 != Anfd)
 {
 return close(Anfd);
 }

}

/**
*@breif 发送数据
*@parma Buff Buffer
*/
int SendByte(int Anfd,char* Buff,int AnSize)
{
       /*write(fd,buff,1 );*/
 return  write(Anfd,Buff,AnSize);

}

/**
*@breif  读取数据
*@param Anfd Handle
*@param Buff  ReceBuffer
*@parma AnSize
*/
int ReadByte(int Anfd,char* Buff,int AnSize)
{
 int nread;
 nread = read(Anfd,Buff,AnSize);
 return nread;
}

/**
*@breif  main()
*/
int main(int argc, char **argv)
{
 int fd;
 int nread;
 //缓冲区
 char buff[512];
 char *dev ="/dev/ttyS1";
 //打开串口
 fd = OpenDev(dev);
 printf("%d/n",fd);
 if (fd>0)
 {
  set_Parity(fd,57600,8,1,'N');
         }
 else
  {
  printf("Can't Open Serial Port!/n");
  exit(0);
  }


printf("Open com OK!/n");

SendByte(fd,buff,6);

ReadByte(fd,&(buff[0]),9);  
printf("%d/n",buff[3]);

printf("CLOSECOM NOW!/n");
   CloseDev(fd);
printf("CLOSECOM OK!/n");
    exit(0);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值