|
調(diào)試時候發(fā)送短的字符串沒問題,長的字符串,大概到了20個字節(jié)就出問題了,而且前面的20個左右字節(jié)正確,后面的都錯了,而且收到的字節(jié)也多了幾個。- #include
- #include
- #include
- #include
- #include
- #define BAUDRATE B19200
- #define SERIALDEVICE "/dev/ttyS1"
- int main()
- {
- int fd,ncount;
- struct termios oldtio,newtio;
- char buf[]="This is a simple application for serial communication\r\n";
-
- fd = open(SERIALDEVICE, O_RDWR | O_NOCTTY ); // 打開串口1,UART1,O_SYNC表示是同步打開的就是要把數(shù)據(jù)全都寫入才返回的。
- if (fd <0)
- {
- perror(SERIALDEVICE);
- exit(-1);
- }
-
- tcgetattr(fd,&oldtio); //
- bzero(&newtio, sizeof(newtio)); //
-
- newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; //串口設(shè)置為波特率19200bps,8N1,
- newtio.c_iflag = IGNPAR | ICRNL; // IGNPAR:忽略奇偶性錯誤;ICRNL:將回車符映射為換行符
- newtio.c_oflag = 0;
- newtio.c_lflag = ICANON;
-
- tcflush(fd, TCIFLUSH);
- fcntl(fd,F_SETFL,0); // 文件描述詞操作
- tcsetattr(fd,TCSANOW,&newtio); // 選擇新的設(shè)置,TCSANOW:新設(shè)置立即生效
- ncount=write(fd,buf,sizeof(buf)); // 往串口發(fā)送數(shù)據(jù)
- printf("the bytes written to serial is %d\n",ncount); // 發(fā)送的字符個數(shù)
- printf("character to send is: %s\n",buf); // 發(fā)送的字符串
- perror("write"); // 錯誤
- tcsetattr(fd,TCSANOW,&oldtio);
- close (fd);
- return 0;
- }
復(fù)制代碼 |
|