UBUNTU C 的 USB 到串行通信问题

USB to Serial communication problems for UBUNTU C

本文关键字:通信 问题 USB UBUNTU      更新时间:2023-10-16

我正在尝试从Odroid-U2上的C++代码控制伺服系统。 我使用USB串行线将LynxMotion的SSC-32伺服驱动器连接到Odroid。

简单的串行命令控制舵机,例如"#n Puuu",后跟回车,其中 n=舵机的引脚号,uuu=脉冲宽度。 从Odroid使用PUTTY时,我能够很好地控制舵机,但是在使用C++代码控制舵机时遇到了问题。 例如,在我的代码中,我执行以下操作:

fstream f;
f.open("/dev/ttyUSB0");
f << "#0 P600r";
f.close();
有一次,我能够运行此代码,

并且它适当地摆动了伺服器,但是现在当我尝试运行此代码时,终端卡住了并挂起。 我将问题缩小到f.open("/dev/ttyUSB0"(行,该行阻止代码运行。 我假设我需要以某种方式配置 USB 端口。 我知道我需要 115200 的波特率,并相应地设置了它,但我有点像 Ubuntu n00b,所以我不确定我需要什么其他类型的配置。

我的Linux版本是Linaro 12.11。

当我键入stty时,设置的非默认配置似乎是:

speed 115200 baud; line = 0;
-brkint ixoff -imaxbel
-iexten

您不能依赖串行端口的默认设置(并且您不应该尝试使用 stty 在程序之外设置它们(。您必须将代码写入程序以正确设置串行端口。为此,您必须使用 tcsetattr/tcgetattr、cfsetspeed 等函数,请参阅 man termios。

此外,fstream 可能无法提供对要使用的正确 open(( 函数参数的访问,因为在 UNIX 上打开串行端口应该使用O_NOCTTY标志来完成。