树莓派3 串口

之前使用树莓派2的串口/dev/ttyAMA0一直没有什么问题,但发现树莓派3使用相同的方法不灵了。

查了网上很多资料,都是旧的用法如:http://blog.csdn.net/xukai871105/article/details/22713925

终于用google找到了:http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/ 上面还有很多有趣的树莓派应用。

总结在安装了Raspbian Jessie的树莓派3上正确使用J8第8脚(TXD, GPIO14)和第10脚(RXD, GPIO15)上的串口需要做:

  1. Raspbian Jessie基于Debian Jessie, 相对之前的版本Wheezy, 新版本系统Jessie使用了systemd, 所以找不到/etc/inittab文件了。找不到就不要找了,因为不需要了。
  2. 因为树莓派3加入了蓝牙功能,于是把/dev/ttyAMA0串口分配给蓝牙了。之前使用J8.8, J8.10这个串口是对应/dev/ttyAMA0的,但是现在重新分配给/dev/ttyS0了,所以之前的程序对修改过来。
  3. 那如何使用之个/dev/ttyS0呢?因为系统开机的信息和登录程序getty都使了这个串口,那么我们要禁用它,和之前一样可以运行:

    选择Advanced Options:advanced-options选择Serial:serialWould you like a login shell to be accessible over serial?选择<No>login-shell-to-accessible-over-serial然后后面的选<ok>, <Finish>, 重启后, 串口就不再输出启动信息, 也不能在串口登录, 这时相信当于没有/dev/ttyS0了:

     

    可以看到没有ttyS0了, 但是ttyAMA0还在, 因为是给蓝牙用的,就别再打它的主意了。这时要启用ttyS0:

    在最后一行找到:enable_uart=0, 把它改成enable_uart=1, 保存,退出, 重启。

    串口就可以被自已的程序使用,用来连接打印机,arduino或其它单片机之类的了。

  4. 这时还可以看看/boot/cmdline.txt文件内容:

    对比之前串口可以登录getty的内容:

    最后一个console=的设备serial0就是启动信息的输出。它是一个符号链接到ttySo.

    这里就很清楚了,serial0 指向ttyS0, serial1指向ttyAMA0, 所以以后写程序可以用serial0, serial1代替tty这种写法,做到兼容。

  5. 最后用python写两个程序,外接一个USB转串口的线做个loopback测试:

serial_write.py:

serial_read.py:

2个程序运行后如图:loop-back

最后符上树莓派的GPIO图,只有pi2的,和pi3兼容:raspberry-pi-v2-mod-b-pinout