日期:2014-05-16  浏览次数:20685 次

linux 下串口接受问题
#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>             /*错误号定义*/
#include           <string.h>

#define   _POSIX_SOURCE   1
#define   FALSE   0
#define   TRUE   1

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

int   speed_arr[]   =   {   B38400,   B19200,   B9600,   B4800,   B2400,   B1200,   B300,
        B38400,   B19200,   B9600,   B4800,   B2400,   B1200,   B300,   };
int   name_arr[]   =   {38400,     19200,     9600,     4800,     2400,     1200,     300,
        38400,     19200,     9600,   4800,   2400,   1200,     300,   };
void   set_speed(int   fd,   int   speed)
{
    int       i;
    int       status;
    struct   termios       Opt;
    tcgetattr(fd,   &Opt);
    for   (   i=   0;     i   <   sizeof(speed_arr)   /   sizeof(int);     i++)
      {
      if     (speed   ==   name_arr[i])
      {
              tcflush(fd,   TCIOFLUSH);
        cfsetispeed(&Opt,   speed_arr[i]);
        cfsetospeed(&Opt,   speed_arr[i]);
        status   =   tcsetattr(fd,   TCSANOW,   &Opt);
        if     (status   !=   0)
                        perror( "tcsetattr   fd1 ");
          return;
          }
      tcflush(fd,TCIOFLUSH);
      }
}
/**
*@brief       设置串口数据位,停止位和效验位
*@param     fd           类型     int     打开的串口文件句柄*
*@param     databits   类型     int   数据位       取值   为   7   或者8*
*@param     stopbits   类型     int   停止位       取值为   1   或者2*
*@para