我正在尝试让我的 Java 飞行数据采集程序(该程序在运行 Lubuntu 16.04 的单板计算机上运行)与 Betaflight Nero F7 IMU 传感器板通信,该传感器板通过 USB 端口连接到 SBC。它在我用于开发的笔记本电脑(运行 Ubuntu 16.04)上运行良好,但在 SBC 上重新启动后不会响应。
我认为这可能与默认波特率有关,笔记本电脑上的默认波特率为 115200,SBC 上的默认波特率为 9600。如果我使用以下命令在 SBC 上更改它screen
,那么我的代码可以与传感器通信:
screen /dev/ttyACM0 115200
如果(重新启动后)我使用命令更改它stty
,我仍然无法与它对话:
stty -F /dev/ttyACM0 115200
在这两种情况下,波特率似乎都设置正确:
setserial /dev/ttyACM0 -av
/dev/ttyACM0, Line 0, UART: unknown, Port: 0x0000, IRQ: 0
Baud_base: 115200, close_delay: 12, divisor: 0
closing_wait: none
Flags: spd_normal low_latency
当我使用 Betaflight 配置实用程序(Chrome 应用程序)时,它可以打开设备并与其通信。之后,我的代码也可以运行。他们的默认波特率为115200,但如果我将其更改为例如9600,它仍然有效。
我还运行了stty
命令来获取其他端口设置,并尝试使它们与配置器实用程序打开传感器后的设置完全相同:
stty -F /dev/ttyACM0 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint ignpar parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten -echo -echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
但即使设置完全匹配,我的代码仍然无法在 SBC 上运行,直到我运行screen
或其配置器。我可以排除传感器的不同状态,因为它可以立即在笔记本电脑上工作。还有什么其他神奇的设置可以screen
和配置实用程序更改,而我无法使用 和 来setserial
更改stty
?