出现的原因:由于串口写数据字节数有限,上一次数据没有写完的情况下,第二次数据已经到来,造成写数据失败,表现为串口不可用。
解决方法,1.加延时的方法
通过波特率,计算延时。
以波特率为115200为例,一帧数据包括:1个起始位:8个数据位;1个停止位;总共10bits;所以
波特率115200 = 115200 (位/秒)
如果没有校验位,就应该除以 10,得到的是每秒字节数:
波特率115200 = 115200 (位/秒) = 11520 (字节/秒)
现在串口最大传输数据位4095字节,4095/11520 = 0.355秒,也就是在波特率为115200下传输4095个字节需要0.355秒,
所以需要保证在这个时间范围内才能传输完数据,如果小于这个时间传输数据失败。
2. 将串口设置为阻塞状态
将串口用阻塞的方式打开,fd = open(dev, O_RDWR | O_NOCTTY)
fcntl(serial->fd, F_SETFL, 0);设置为阻塞。
对fcntl函数的理解:https://baike.baidu.com/item/fcntl/6860021?fr=aladdin