【问题标题】:USB to Serial communication problems for UBUNTU CUBUNTU C 的 USB 转串口通信问题
【发布时间】:2013-10-01 17:39:33
【问题描述】:

我正在尝试通过 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

【问题讨论】:

    标签: c++ ubuntu tty usbserial odroid


    【解决方案1】:

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

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

    【讨论】:

    • 这是正确的,您可以通过查看 Posix 操作系统的串行编程指南来获取有关此 API 的更多信息:cmrr.umn.edu/~strupp/serial.html
    • 好的,我认为我的 C++ 代码之前一定可以工作,因为 PUTTY 同时打开并且可能配置了 USB 端口。看来我还有一些研究要做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    相关资源
    最近更新 更多