由于已经完成了第一个HELLO程序,标志着整个编译环境已经没有问题了,下来准备做一下串口测试程序。由于串口驱动开发板已经作好了,所以就作一个Linux串口测试工具简单的数据收发看看。
 

由于已经完成了第一个HELLO程序,标志着整个编译环境已经没有问题了,下来准备做一下串口测试程序。由于串口驱动开发板已经作好了,所以就作一个Linux串口测试工具简单的数据收发看看。

/* rs232_send.c*/  #include   #include   #include   #include   #include  #include   #include   #include   #include   #defineBAUDRATEB115200//38400  #defineMODEMDEVICE"/dev/ttyS1"  int main()  {  int fd,c=0,res;  struct termios oldtio,newtio;  intch;  static char s1[20],buf[19];  printf("start ...\n");  /*打开PC的COM1口*/  fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);   if (fd  {  perror(MODEMDEVICE);  exit(1);  }  printf("open...\n");  /*将旧的通讯参数存入oldtio结构*/  tcgetattr(fd,&oldtio);  /*初始化新的newtio */  bzero(&newtio,sizeof(newtio));  /*8N1*/  newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;  newtio.c_iflag = IGNPAR;  newtio.c_oflag = 0;   /*正常模式*/  /*newtio.c_lflag = ICANON;*/      /*非正常模式*/  newtio.c_lflag = 0;  newtio.c_cc[VTIME] = 0;   newtio.c_cc[VMIN] = 10;   tcflush(fd,TCIFLUSH);  /*新的temios作为通讯端口参数*/  tcsetattr(fd,TCSANOW,&newtio);  printf("writing...\n");   while(1)  {  res = read(fd,buf,10);  res = write(fd,buf,7);  if(buf[0]==9) break;  }   printf("close...\n");  close(fd);  /*还原旧参数*/  tcsetattr(fd,TCSANOW,&oldtio);  return 0;  }  

Linux串口测试工具网上常见的版本都看起来比较烦琐,下面是一个简单一点的,这个程序功能是收到10个字节后会发前7个字节,如果所发的数据的第一个字节是9则退出。
/* rs232_send.c*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineBAUDRATEB115200//38400
#金沙城中心赌场 ,defineMODEMDEVICE”/dev/ttyS1″
int main()
{
int fd,c=0,res;
struct termios oldtio,newtio;
intch;
static char s1[20],buf[19];
printf(“start …\n”);
/*打开PC的COM1口*/
fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);
if (fd
{
perror(MODEMDEVICE);
exit(1);
}
printf(“open…\n”);
/*将旧的通讯参数存入oldtio结构*/
tcgetattr(fd,&oldtio);
/*初始化新的newtio */
bzero(&newtio,sizeof(newtio));
/*8N1*/
newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;

还有一点要注意,就是Linux串口测试工具串口有两种工作模式,即正规模式和非正规模式,如果习惯在串口调试器中用16进制发送,此时串口应该为非正规模式才行。

/*正常模式*/
/*newtio.c_lflag = ICANON;*/

下面是这两种模式的说明
Linux串口测试工具正规模式CANONICAL或者COOKED)
此模式下,终端设备会处理特殊字符,并且数据传输是一次一行的方式,既按回车后才开始发送和接收数据。例如LINUX的SHELL。
Linux串口测试工具非正规模式NON-CANONICAL或者RAW)
此模式下,终端设备不会处理特殊字符,并且数据传输是一次一个字符的方式,既不用按回车换行。例如LINUX的VIM。

/*非正常模式*/
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 10;

tcflush(fd,TCIFLUSH);
/*新的temios作为通讯端口参数*/
tcsetattr(fd,TCSANOW,&newtio);
printf(“writing…\n”);

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图