在RPi3中,有两个串口:
从RPi2继承过来的高性能串口是ttyAMA0,在RPi3中默认分配给蓝牙模块;
另一个是外接的低性能串口,ttyS0,默认情况下,ttyS0给Linux调用,用来串口登录设备。
两个串口的用途、名称及映射关系总结如下:
/dev/ttyAMA0 -> Bluetooth
/dev/ttyS0 -> GPIO serial port
基于以上,两个串口在默认情况下都不能用于设备控制。
ttyAMA0是分配给蓝牙模块使用的,也是默认开启的。如果想让蓝牙正常工作,这个串口不要动,使用ttyS0来进行设备控制就可以。如果不使用蓝牙模块,想使用高性能串口进行设备控制,在最后也有办法。
ttyS0的开启/关闭状态,可以通过
来设置,对应的配置文件内容是:
图形和命令两种方式是等效的。如果想使用ttyS0进行设备控制,必须先开启它。重启系统生效。
默认ttyS0是分配给Linux做console的。要改为设备控制,就要先改掉原来的用途。
Linux Console是通过getty进程与ttyS0关联的,所以先停掉getyy,解除系统占用:
再把内容定位关掉:
其中的console=serial0,115200,就是内容定位,删掉剩下:
重启之后,ttyS0就被彻底释放了。此时可以通过python或串口调试工具对ttyS0进行测试。
1.1节中介绍了在RPi3中,ttyS0有个alias name叫serial0,所以在代码中,一律使用serial0更好。
想用ttyS0做设备控制,只需如下三步:
如果想用高性能串口做设备控制,把低性能串口留给蓝牙或干脆不用,可以这样做:
重启生效。此时:
与1.1节中命名已经对调,在代码中使用serial0则为高性能串口ttyAMA0。
注意将串口改作他用,首先要先从系统中把串口释放出来,例如停掉蓝牙、getty。
最后: