Raspberry Pi UART系列无法正常工作

时间:2013-12-25 11:10:09

标签: serial-port raspberry-pi uart

我正在尝试通过串行连接(GPIO UART引脚)在Raspberry Pi(B型号,啄木鸟)和STM32F4板之间发送/接收数据。

要设置串口,我按照以下几个教程中的所有步骤进行操作: http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port

当未能连接到STM32F4板时,我读到你可以在pi上本地测试串口,如果你只是将TX,RX引脚从pi连接到彼此,它应该只重复输入的数据小型机。

遗憾的是,这也不起作用。

文件中的ttyAMA0设置&#cm; cmdline'和' inittab'好的(如许多教程中所述)

并且还尝试了自动配置程序 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检查可用的串口时,会抛出nothinig:

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个关于如何设置串口的不同教程和博客,我不喜欢导致这种情况的原因。你能给我一些我可以寻找的建议。

4 个答案:

答案 0 :(得分:3)

我今天刚刚经历了类似的事情。我必须设置minicom来禁用硬件控制,循环对我有用,并且通过UART将2个Raspis交叉连接在一起。

另外,我在TTYAMA0连接字符串上使用115200 buad速率 minicom -b 115200 -o -D / dev / ttyAMA0

Alt A

ž

0

串口设置[enter]

F关闭硬件流控制

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

我的minicom页脚也看起来像这样(只是差异波特率,但显示离线也有效)

CTRL-A Z求助| 115200 8N1 | NOR | Minicom 2.5 | VT102 |离线

祝你好运!

答案 1 :(得分:2)

我有一个Arduino通过电平转换器(3.3v到5v)连接到我的Raspberry Pi串口,并且还遇到了minicom的问题。我可以在minicom中收到Arduino的输出,但无论我尝试什么设置,我都无法发送任何内容。使用插入USB(/ dev / ttyUSB0)的Arduino时,我也遇到了完全相同的问题。

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

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

答案 2 :(得分:2)

您可以通过将此草图放在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);
  }

}

使用下图将其连线:

Wiring Arduino to Raspberry Pi

注意:确保将USB线缆连接到Arduino。它将由Raspberry Pi提供支持。

注意:Raspberry Pi运行在3.3V,因此您必须确保连接到它的任何东西都运行3.3V或具有电平转换器。查看有关电平移位器here的更多信息。 (下至逻辑电压电平部分)如果您想了解更多信息,Sparkfun有一些基本的电平转换器(带有原理图)here

然后,您可以安装并运行screen。屏幕是一种连接串口的简单方法。

apt-get install screen

然后运行以下命令:

screen /dev/ttyAMA0 115200

屏幕将显示空白。但是,当你开始输入时,你会注意到你正在写的字符被循环回到你的终端。

注意:如果屏幕仍然是空白,则应仔细检查连接(Arduino上的电源检查是一件好事)。

如果有疑问,你可以看到我的整个例子here

答案 3 :(得分:1)

感谢提示家伙。我尝试了它们,但是它们没有解决问题看来,raspberry pi UART端口是快捷方式。我把它连接到我借来的另一个树莓派(模型A),B模型刚刚返回我用A模型发送的所有发送的字符而不在本地显示它们。

我购买了一个新型号B并测试了AURT端口,它正常工作。

虽然我购买的STM32F4板也应该是3.3V,但它似乎在某些时候破坏了我的rasp UART(或者从来没有工作过)。无论如何,当我再次使用STM32F4板进行测试时,我将使用LLC,以确保我不会炸掉任何东西。

再次提示!