luxxsys 发表于 2016-6-28 19:51:11

树莓派Raspberry Pi 3b中串口设置成外接控制器

本帖最后由 luxxsys 于 2016-6-29 17:35 编辑

总结了一下RPi3中串口的状态和设置方法。分享一下。附件为格式化文字,更可读。
前面部分是讲解,不想看的直接跳到最后两节照着做就行。

1. 串口
1.1. Rpi3中串口的用途
在RPi3中,有两个串口:
从RPi2继承过来的高性能串口是ttyAMA0,在RPi3中默认分配给蓝牙模块;

另一个是外接的低性能串口,ttyS0,默认情况下,ttyS0给Linux调用,用来串口登录设备。

两个串口的用途、名称及映射关系总结如下:
/dev/ttyAMA0 -> Bluetooth
/dev/ttyS0 -> GPIO serial port

http://i.imgur.com/RKepR5Z.png

基于以上,两个串口在默认情况下都不能用于设备控制。

1.2. Rpi3中串口的初始状态
ttyAMA0是分配给蓝牙模块使用的,也是默认开启的。如果想让蓝牙正常工作,这个串口不要动,使用ttyS0来进行设备控制就可以。如果不使用蓝牙模块,想使用高性能串口进行设备控制,也有办法,放在最后。
ttyS0的开启/关闭状态,可以通过
sudo raspi-config ->Advanced Options ->Serial
来设置,对应的配置文件内容是:
cat /boot/config.txt | grep uart
enable_uart=1
图形和命令两种方式是等效的。如果想使用ttyS0进行设备控制,必须先开启它。重启系统生效。

1.3. 设置ttyS0
默认ttyS0是分配给Linux做console的。要改为设备控制,就要先改掉原来的用途。
Linux Console是通过getty进程与ttyS0关联的,所以先停掉getyy,解除系统占用:
sudo systemctl stop [email protected]
sudo systemctl disable [email protected]
再把内容定位关掉:
sudo vi /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
其中的console=serial0,115200,就是内容定位,删掉剩下:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
重启之后,ttyS0就被彻底释放了。此时可以通过python或串口调试工具对ttyS0进行测试。
1.1节中介绍了在RPi3中,ttyS0有个alias name叫serial0,所以在代码中,一律使用serial0更好。

1.4. 总结一下
想用ttyS0做设备控制,只需如下三步:
开启ttyS0:raspi-config或config.txt中enable_uart=1均可;
释放ttyS0:停掉getty服务systemctl disable [email protected],然后从/boot/cmdline.txt中删掉console=serial0,115200;
代码中统一使用名称为serial0。


1.5. 串口调换
如果想用高性能串口做设备控制,把低性能串口留给蓝牙或干脆不用,可以这样做:
sudo vi /boot/config.txt
增加一行:
dtoverlay=pi3-disable-bt
重启生效。此时:
http://i.imgur.com/poUcEdc.png

与1.1节中命名已经对调,在代码中使用serial0则为高性能串口ttyAMA0。

注意将串口改作他用,首先要先从系统中把串口释放出来,例如停掉蓝牙、getty。

164335413 发表于 2016-6-29 09:19:46

手里只用2B,如果硬件上多几个串口就好了。

简单侣图 发表于 2016-7-1 18:33:11

:)多谢分享哦,好好试试
页: [1]
查看完整版本: 树莓派Raspberry Pi 3b中串口设置成外接控制器