|
关键词:
uclinux , 串口 , 求助 , 字符
调试时候发送短的字符串没问题,长的字符串,大概到了20个字节就出问题了,而且前面的20个左右字节正确,后面的都错了,而且收到的字节也多了几个。- #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表示是同步打开的就是要把数据全都写入才返回的。
- if (fd <0)
- {
- perror(SERIALDEVICE);
- exit(-1);
- }
-
- tcgetattr(fd,&oldtio); //
- bzero(&newtio, sizeof(newtio)); //
-
- newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; //串口设置为波特率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); // 选择新的设置,TCSANOW:新设置立即生效
- ncount=write(fd,buf,sizeof(buf)); // 往串口发送数据
- printf("the bytes written to serial is %d\n",ncount); // 发送的字符个数
- printf("character to send is: %s\n",buf); // 发送的字符串
- perror("write"); // 错误
- tcsetattr(fd,TCSANOW,&oldtio);
- close (fd);
- return 0;
- }
复制代码 |
|