|
调试时候发送短的字符串没问题,长的字符串,大概到了20个字节就出问题了,而且前面的20个左右字节正确,后面的都错了,而且收到的字节也多了几个。<ol><li>#include <sys/types.h> <li>#include <sys/stat.h> <li>#include <fcntl.h> <li>#include <termios.h> <li>#include <stdio.h> <li><li>#define BAUDRATE B19200 <li>#define SERIALDEVICE "/dev/ttyS1" <li>int main() <li>{ <li> int fd,ncount; <li> struct termios oldtio,newtio; <li> char buf[]="This is a simple application for serial communication\r\n"; <li> <li> fd = open(SERIALDEVICE, O_RDWR | O_NOCTTY );// 打开串口1,UART1,O_SYNC表示是同步打开的就是要把数据全都写入才返回的。<li> if (fd <0) <li> { <li> perror(SERIALDEVICE); <li> exit(-1); <li> } <li> <li> tcgetattr(fd,&oldtio); // <li> bzero(&newtio, sizeof(newtio)); //<li> <li> newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; //串口设置为波特率19200bps,8N1,<li> newtio.c_iflag = IGNPAR | ICRNL; // IGNPAR:忽略奇偶性错误;ICRNL:将回车符映射为换行符<li> newtio.c_oflag = 0; <li> newtio.c_lflag = ICANON;<li> <li> tcflush(fd, TCIFLUSH); <li> fcntl(fd,F_SETFL,0); // 文件描述词操作<li> tcsetattr(fd,TCSANOW,&newtio); // 选择新的设置,TCSANOW:新设置立即生效<li> ncount=write(fd,buf,sizeof(buf)); // 往串口发送数据<li> printf("the bytes written to serial is %d\n",ncount); // 发送的字符个数<li> printf("character to send is: %s\n",buf); // 发送的字符串<li> perror("write"); // 错误 <li> tcsetattr(fd,TCSANOW,&oldtio); <li> close (fd); <li> return 0; <li>} </ol><em onclick="copycode($('code_1YM'));">复制代码</em> |
|