2

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

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

fstream f;
f.open("/dev/ttyUSB0");
f << "#0 P600\r";
f.close();

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

我的 Linux 版本是 Linaro 12.11。

当我输入 stty 时,非默认配置集似乎是:

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

1 回答 1

1

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

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

于 2013-10-01T18:24:16.273 回答