前一阵子因为工作需要摸索的一些linux下得串口通信,总结下结果, 有点乱。。。主要针对linux串口校验方式mark, space的摸索。。。
参考文档:
文档一:
Serial Programming Guide for POSIX Operating Systems
文档二:Serial Programming Howto;
文档三:Serial Howto;
说明:由于当前Linux串口通讯方面的文档比较少,网上相关文档大都以这三篇为参考,第一个文档对串口设置和异步通讯介绍的都比较全面,从中能了解串口设置的全面知识,及一些细节性问题;第二个文档有一个非阻塞接收端的例子,写得很好;第三个文档主要从硬件方面介绍串口。
串口通讯程序可能用到的:
1.
打开串口
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
O_RDWR
读写方式打开
O_NOCTTY
不允许进程管理串口
O_NDELAY
非阻塞
2.
写串口
n = write(fd, "ATZ/r", 4);
n实际写入个数;
3.
设置串口为非阻塞方式
fcntl(fd, F_SETFL, FNDELAY);
4.设置串口为阻塞方式:
fcntl(fd, F_SETFL, 0);
5.读串口:
res = read(fd,buf,len);
6.关闭串口
Close(fd);
串口设置部分:
波特率:
Tcgetat tr(fd, &options);
cfsetispeed(&options, B19200);
cfsetospeed(&options, B19200);
options.c_cflag |= (CLOCAL | CREAD);
tcsetattr(fd, TCSANOW, &options);
校验位等:
No parity (8N1):
options.c_cflag &= ~PARENB
options.c_cflag &= ~CSTOPB
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
Even parity (7E1):
options.c_cflag |= PARENB
options.c_cflag &= ~PARODD