ttyACM0已连接但未显示接收到的数据

ttyACM0已连接但未显示接收到的数据

我有一个STM32F4微控制器,带有USB接口,我将它连接到树莓派。连接后,它显示为/dev/ttyACM0。我每秒从设备发送一些字符。

在窗户上,用腻子,一切正常。我很好地收到了这些字符。

在树莓派上,如果我运行命令:

>> sudo tail -f /dev/ttyACM0  

它在屏幕上不显示任何内容。在我的调试器中,我确实看到设备没有“挂起”,看起来它正在正确发送。

如果该tail命令未运行,则设备(使用简单的程序)会挂起,并且看门狗定时器会超时。

这种行为似乎很正常,因为当腻子未列出时,我在 Windows 中也有相同的症状。

如何显示发送的字符?

这是权利问题吗?我应该使用其他程序吗?我确实尝试了论坛的一些建议:更改99-com.rules, set all rights to/dev/ttyACM0` 中的规则,但没有运气。

答案1

PuTTY 是一个终端仿真器,因此绝对是为一次处理单个字符而设计的。

tail另一方面,默认情况下可能需要完整的字符行,要么是因为命令的设计,要么是因为 TTY 驱动程序正在缓冲输出(除非覆盖其默认设置)。

您可以使用更了解 TTY 驱动程序和串行端口性质的程序,例如minicomcu。如果您发现它们可以工作但不适合您的使用,也许可以stty -a -F /dev/ttyACM0在它们中的任何一个使用端口时使用列出 TTY 设备设置,然后stty在使用 之前使用命令重现这些设置tail -f。您可能需要这样的东西来禁用在此用例中不需要的所有 TTY 设备默认功能:

stty -F /dev/ttyACM0 -crtscts ignbrk -icrnl -onlcr -ixon -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

注意:stty选项语法是过时的,每个选项关键字前面的减号将禁用相应的TTY设备选项;使用不带减号的关键字将启用它。

如果事实证明tail您正在使用的命令版本(可能来自 GNUcoreutils软件包,但也可能来自于busybox您在 RasPi 中运行的发行版)是完全面向行的并且无法更改,那么它可能仍然不适合这项工作,除非微控制器发送的字符时不时地包含 Unix 风格的换行字符。 (如果微控制器发送 CR 而不是 LF,那么如果您启用该icrnl选项,TTY 驱动程序可以为您修复它。)

答案2

#!/bin/bash
cat < /dev/ttyACM0 | awk 'BEGIN { FS = "," } {OFMT = "%2.5f"}\
/GPGGA/ { print "ID: ", $1, "Time: ", $2, "Lat: ", $3, "Lon: ", $5, "Höhe: ", $10}' > data

该脚本适用于 Raspberry Pi。数据存储在文件“data”中。

相关内容