电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章接口定义简单的串口测试程序

简单的串口测试程序

11-20 14:47:17 | http://www.5idzw.com | 接口定义 | 人气:669
标签:接口技术,微机原理与接口技术,单片机原理与接口技术,http://www.5idzw.com 简单的串口测试程序,http://www.5idzw.com

  1.TTY为编译好的在嵌入式系统utuLinux下的可执行文件(交叉编译器为arm-linux-gcc).

  2.程序为YC2440通过串口1(COM1)向计算机主机发送一个字符串,主机可用超级终端(windows)或minicom(Linux)接收。

  3.minicom下只能显示90个左右的字符,原因寻找中。

  #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  -1

  //设置串口通信速率

  // fd     类型 int  打开串口的文件句柄

  // speed  类型 int  串口速度

  //

  int speed_arr[] = {B115200,B38400, B19200, B9600, B4800, B2400, B1200, B300,B38400, B19200, B9600, B4800, B2400, B1200, B300, };

  int name_arr[] = {115200,38400,  19200,  9600,  4800,  2400,  1200,  300, 38400,  19200,  9600, 4800, 2400, 1200,  300, };

  int 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 FALSE;

  }

  tcflush(fd,TCIOFLUSH);

  }

  }

  /**

  *@brief   设置串口数据位,停止位和效验位

  *@param  fd     类型  int  打开的串口文件句柄*

  *@param  databits 类型  int 数据位   取值 为 7 或者8*

  *@param  stopbits 类型  int 停止位   取值为 1 或者2*

  *@param  parity  类型  int  效验类型 取值为N,E,O,,S

  */

  int set_Parity(int fd,int databits,int stopbits,int parity)

  {

  struct termios options;

  if  ( tcgetattr( fd,&options)  !=  0)

  {

  perror("SetupSerial 1");

  return(FALSE);

  }

  options.c_cflag &= ~CSIZE;

  switch (databits) /*设置数据位数*/

  {

  case 7:

  options.c_cflag |= CS7;

  break;

  case 8:

  options.c_cflag |= CS8;

  break;

  default:

  fprintf(stderr,"UnsupPorted data size\n");

  return(FALSE);

  }

  switch (parity)

  {

  case 'n':

  case 'N':

  options.c_cflag &= ~PARENB;   /* Clear parity enable */

  options.c_iflag &= ~INPCK;     /* Enable parity checking */

  break;

  case 'o':

  case 'O':

  options.c_cflag |= (PARODD | PARENB);  /* 设置为奇效验*/

  options.c_iflag |= INPCK;             /* Disnable parity checking */

  break;

  case 'e':

  case 'E':

  options.c_cflag |= PARENB;     /* Enable parity */

  options.c_cflag &= ~PARODD;   /* 转换为偶效验*/

  options.c_iflag |= INPCK;       /* Disnable parity checking */

  break;

  case 'S':

  case 's':  /*as no parity*/

  options.c_cflag &= ~PARENB;

  options.c_cflag &= ~CSTOPB;

  break;

  default:

  fprintf(stderr,"Unsupported parity\n");

  return (FALSE);

  }

  /* 设置停止位*/

  switch (stopbits)

  {

  case 1:

  options.c_cflag &= ~CSTOPB;

  break;

  case 2:

  options.c_cflag |= CSTOPB;

  break;

  default:

  fprintf(stderr,"Unsupported stop bits\n");

  return (FALSE);

  }

  /* Set input parity option */

  if (parity != 'n')

  options.c_iflag |= INPCK;

  options.c_cc[VTIME] = 150; // 15 seconds

  options.c_cc[VMIN] = 0;

  tcflush(fd,TCIFLUSH); /* Update the options and do it NOW */

  if (tcsetattr(fd,TCSANOW,&options) != 0)

  {

  perror("SetupSerial 3");

  return (FALSE);

  }

  return (0);

  }

  /**

  *@breif 打开串口

  */

  int openDev(char *Dev)

  {

  int fd = Open(Dev, O_RDWR | O_NOCTTY | O_NDELAY);         //| O_NOCTTY | O_NDELAY

  if (-1 == fd)

  { /*设置数据位数*/

  perror("Can't Open Serial Port");

  return FALSE;

  }

  else

  return fd;

  }

  /**

  *@breif  main()

  */

  int main(int argc, char **argv)

  {

  int fd;

  int nwrite;

  char *buff="Hello! This is a Serial Test Program,if you can see this,you success!Congratulations!!!!!!!!!";

  char *dev ="/dev/s3c2410_serial1";

  fd = OpenDev(dev);

  if (fd>0)

  set_speed(fd,115200);

  else

  {

  printf("Can't Open Serial Port!\n");

  exit(0);

  }

  if (set_Parity(fd,8,1,'N')== FALSE)

  {

  printf("Set Parity Error\n");

  exit(1);

  }

  if((nwrite = write(fd,buff,strlen(buff)))>0)

  {

  printf("%s\n",buff);

  printf("\nLen %d\n",nwrite);

  // buff[nread+1]='\0';

  //printf("\n%s",buff);

  }

  close(fd);

  }

  


,简单的串口测试程序
关于《简单的串口测试程序》的更多文章