树莓派的UART串口无法工作

9

我正在尝试在树莓派(B型号,raspian wheezy)和STM32F4板之间通过串行连接(GPIO UART引脚)发送/接收数据。

为了设置串口,我遵循了几篇教程中的所有步骤,例如: http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port

当无法连接到STM32F4板时,我阅读到如果你将树莓派的TX、RX引脚相互连接,则可以在pi上本地测试串口,它应该只是在minicom中重复输入的数据。

不幸的是,这也不起作用。

在“cmdline”和“inittab”文件中,ttyAMA0的设置是正确的。(如许多教程所述)

还尝试了自动配置脚本 https://github.com/lurch/rpi-serial-console

直接将RX连接到rpi的TX引脚不会在minicom中输出任何内容。 我还使用了一个重复给定输入的Python脚本。 似乎什么都没有用,我有点迷失方向。

Minicom启动命令应该是正确的(尝试使用不同的波特率):

root@raspberrypi:/home/jef# minicom -b 9600 -o -D /dev/ttyAMA0

OPTIONS: I18n
Compiled on Apr 28 2012, 19:24:31.
Port /dev/ttyAMA0

minicom的底部始终显示离线状态:

CTRL-A Z for help |  9600 8N1 | NOR | Minicom 2.6.1  | VT102 |      Offline

在使用 Python 检查可用串口时,没有显示任何内容:

python -m serial.tools.list_ports
no ports found

用户属于dailout组,因此这不应该是问题(尝试使用root和非root用户):

root@raspberrypi:/home/jef# id
uid=0(root) gid=0(root) groups=0(root),20(dialout),1001(indiecity)

检查串口是否不再被getty使用:

root@raspberrypi:/home/jef# ps aux | grep getty
root      2809  0.0  0.1   3740   804 tty1     Ss+  10:36   0:00 /sbin/getty --noclear 38400 tty1
root      2810  0.0  0.1   3740   804 tty2     Ss+  10:36   0:00 /sbin/getty 38400 tty2
root      2811  0.0  0.1   3740   804 tty3     Ss+  10:36   0:00 /sbin/getty 38400 tty3
root      2812  0.0  0.1   3740   804 tty4     Ss+  10:36   0:00 /sbin/getty 38400 tty4
root      2813  0.0  0.1   3740   804 tty5     Ss+  10:36   0:00 /sbin/getty 38400 tty5
root      2814  0.0  0.1   3740   804 tty6     Ss+  10:36   0:00 /sbin/getty 38400 tty6
root      3129  0.0  0.1   2012   624 pts/0    S+   11:57   0:00 grep getty

我检查了其他使用ttyAMA0的应用程序,也没有发现任何问题:

root@raspberrypi:/home/jef# ps aux | grep ttyAMA0
root      3125  0.0  0.1   2012   628 pts/0    S+   11:56   0:00 grep ttyAMA0

用户有正确的权限访问串口:

root@raspberrypi:/home/jef# ls -l /dev/ttyAMA0
crw-rw---T 1 root dialout 204, 64 Dec 25 11:53 /dev/ttyAMA0

我有没有遗漏什么?我读了大约20篇关于如何设置串口的教程和博客,但我找不到导致问题的原因。请问你能给我一些建议吗?


值得注意的是,现在在树莓派上正确使用串口的设备路径为/dev/serial0或/dev/serial1。较新的树莓派使用UART进行蓝牙连接,而许多旧的树莓派则不支持。这将确保您的树莓派程序始终连接到预期的端口,无论是UART还是其他端口。 - Marcus G attrezzopox
在我的情况下,我将RX连接到了RX,TX连接到了TX,哈哈... - Milind R
4个回答

5

今天我经历了类似的问题。我不得不将minicom设置为禁用硬件控制,并且通过UART连接2个Raspis,这个方式对我起了作用。

此外,我在TTYAMA0连接字符串上使用115200波特率: minicom -b 115200 -o -D /dev/ttyAMA0

按Alt A

按Z

按O

串口设置[回车]

F键关闭硬件流控制

*保存这些设置,您输入的任何内容都应该显示在屏幕上,但实际上是通过UART传输的。

我的minicom页脚也是这样(只是不同的波特率,但是状态为脱机):

CTRL-A Z获取帮助 |115200 8N1 | NOR | Minicom 2.5 | VT102 | 脱机

祝你好运!


1
关闭硬件控制对我有用!谢谢! - pkout
应该是“Ctrl-A”而不是“Alt-A”,然后跟着“Z”吧?至少,这是我必须遵循的顺序才能进入minicom设置菜单... - GeertVc

3
我有一块Arduino通过电平转换器(3.3v到5v)连接到我的树莓派串行端口上,同时我在使用minicom时遇到了问题。虽然我能够在minicom中接收来自Arduino的输出,但无论尝试了什么设置,我都无法发送任何内容。当我将Arduino插入USB(/dev/ttyUSB0)时,minicom出现完全相同的问题。

最终,我决定使用基本的Python串口控制台,使用pip安装pyserial(pip install pyserial),并执行以下命令:

python -m serial.tools.miniterm -p /dev/ttyAMA0 -e

嗨,我用了新的 Raspberry Pi 并按照你描述的方法做成功了。非常感谢你!另外,现在看起来它也可以使用 minicom。 - Martin Law
问题出在哪里?你说一个新的rPi解决了它?我也遇到了完全相同的问题,但似乎什么都不能解决它。 - sofly
嗨@SoFLy,非常抱歉回复晚了,我猜你的消息通知可能进了我的垃圾邮件文件夹。问题出在树莓派上串口接口使用了一些被切断的GPIO引脚。但是用新的树莓派,之前尝试的任何方法都可以正常工作了。 - Martin Law

2

您可以通过将以下Sketch放在您的Arduino上来运行一个简单的测试:

#define SERIAL_BAUD 115200

void setup() {

  //Init serial connection
  Serial.begin(SERIAL_BAUD);
  Serial.setTimeout(1);

}

void loop() {

  if ( Serial.available() ) {
    byte type = Serial.read();
    Serial.write(type);
  }

}

按照以下图示连接:

将Arduino连接到树莓派

注意:确保不要将USB电缆连接到Arduino。它将由树莓派供电。

注意:树莓派使用3.3V电压,因此您必须确定任何连接到它的设备都是运行在3.3V电压上或者已经进行电平转换。关于电平转换器的更多信息,请查看这里(向下滚动至逻辑电平部分)。如果您想了解更多信息,Sparkfun提供一些基本的电平转换器(带有原理图),可以在这里找到。

然后,您可以安装并运行screen。Screen是连接到串口的一种非常简单的方式。

apt-get install screen

接下来运行以下命令:

screen /dev/ttyAMA0 115200

屏幕将会显示为空白。但是,当您开始输入时,您会注意到您所写的字符正在被回传到您的终端。
注意:如果屏幕仍然为空白,您应该仔细检查连接(检查Arduino上的电源LED灯是否亮)。
如果有疑问,您可以在这里查看我的完整示例:链接

1
感谢大家的建议。我尝试了它们,但它们没有解决问题。似乎树莓派的UART端口被捷径了。我将其连接到另一个我借来的树莓派(型号A),而B型号只是返回了我用A型号发送的所有字符,而没有在本地显示它们。
我购买了一个新的B型号并测试了UART端口,它正常工作。
虽然我购买的STM32F4板也应该是3.3V,但它似乎在某个时候损坏了我的raspi UART(或根本没有工作)。当我再次使用STM32F4板进行测试时,我现在会使用LLC来确保我不会炸掉任何东西。
再次感谢建议!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接