由于已经完成了***个HELLO程序,标志着整个编译环境已经没有问题了,下来准备做一下串口测试程序。由于串口驱动开发板已经作好了,所以就作一个Linux串口测试工具简单的数据收发看看。
/*rs232_send.c*/ #include #include #include #include #include #include #include #include #include #defineBAUDRATEB115200//38400 #defineMODEMDEVICE"/dev/ttyS1" intmain() { intfd,c=0,res; structtermiosoldtio,newtio; intch; staticchars1[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); return0; }
还有一点要注意,就是Linux串口测试工具串口有两种工作模式,即正规模式和非正规模式,如果习惯在串口调试器中用16进制发送,此时串口应该为非正规模式才行。
下面是这两种模式的说明 Linux串口测试工具正规模式(CANONICAL或者COOKED) 此模式下,终端设备会处理特殊字符,并且数据传输是一次一行的方式,既按回车后才开始发送和接收数据。例如LINUX的SHELL。 Linux串口测试工具非正规模式(NON-CANONICAL或者RAW) 此模式下,终端设备不会处理特殊字符,并且数据传输是一次一个字符的方式,既不用按回车换行。例如LINUX的VIM。
相关文章
标签:系统运维