linux下串口编程注意事项

设备:PC机装centos6.5系统,高精度 6 轴惯性导航模块(淘宝上30几块钱买的),TTL转RS232模块(淘宝9.9包邮)

目的:读取导航模块输出的数据,做成api为其它程序提供导航数据

方法:PC通过转换模块与导航模块连接读取数据


注意事项:

1)接线

      a.PC和转换模块连接。当然是RX对TX,TX对RX,GND对GND;针脚的编号,公头的顺序和母头的顺序刚好相反,这样公母才能接上;幸好转换模块是母头直接插就行了(不要鄙视我,觉得这个公头母头真的太形象了)

      b.转换模块和导航模块连接。TX对TX,TX对RX;转换模块的VCC要接+5V,不接的话数据有乱码;导航模块的VCC按说明说可接3V~6V;两个GND不要直接连,要连在各自VCC对应的GND上(是要形成回路吗?不清楚)

      c.导航模块和PC不要直接相连,TTL的电压和RS232的电压不一样,会有乱码的。

2)程序

      程序参考其他现成的就可以。串口设置时,struct termios 的成员变量c_cflag的结构,大概可以按下边的理解

linux下串口编程注意事项_第1张图片

这个和ARM cortex系列的控制量设置很想,不知道这样理解对不对。

在写打开串口时采用同步I/O即fd=open("/dev/ttySx",O_RDONLY|O_SYNC),x表示将要打开的串口号。如果不采用同步I/O,收到数据后,不会马上显示出来,要等缓冲满了才行,不过读操作默认的是同步I/O。但写的时候就要注意了,用write()函数写,默认的可不是同步I/O,要在打开的时候用fd=open("/dev/ttySx",O_WRONLY|O_SYNC),这样写的内容才能马上发送出去,要不要等个什么东西(什么东西我也不知道),只是没用同步模式,老是在写完数据后发不出去要用个echo >/dev/ttySx命令才发的出去。

注:这是我用串口读数据时遇到的问题,供自己以后查阅,不对内容负责


 

你可能感兴趣的:(串口读写)