串口的输出设置【原创】

author:张继飞

前面做串口通信,把从服务器获取到的信息通过串口发送时,对方接收到的数据总是有问题,通过十六进制查看每一次发送回车换行(/r/n 十六进制码为0d 0a)到对方接收后
就变成了0d 0d 0a,这个多出来的0d肯定是串口发送时加入的,为此需要对串口的输出进行设置,这里也就是对串口的c_oflag属性进行设置,经过查找相关资料,c_oflag属性里面
关键是由OPOST来控制,OPOST标志是对输出选项的预处理,这里有个说明。

c_oflag输出标志说明

OPOST是POSIX定义的唯一一个标志,只有设置了该标志后,其它非POSIX的输出标记才会生效。

OPOST
开启该标记,后面的输出标记才会生效。否则,不会对输出数据进行处理。

OLCUC
如果设置,大写字母被转换成小写字母输出。

ONLCR
如果设置,在发送换行符('\n')前先发送回车符('\r')。

ONOCR
如果设置,当current column为0时,回车符不会被发送也不会被处理。

OCRNL
如果设置,回车符会被转换成换行符。另外,如果设置了ONLRET,则current column会被设为0.

ONLRET
如果设置,当一个换行符或回车符被发送的时候,current column会被设置为0。

OXTABS
如果设置,制表符会被转换成空格符。

这么一来就明了的多了如果想要预处理输出就这样用newtio.c_oflag |= OPOST;如果要原始数据的输出就这样用newtio.c_oflag &= ~OPOST;
如果想对某一项操作,可以先支持OPOST,然后对后面的标志进行适当的选取。

猜你喜欢

转载自blog.csdn.net/zjf30366/article/details/84665939