0x00 前言
首先介绍RPI3中的两个串口
- /dev/ttyAMA0:
RPI3配备了蓝牙,为了保证蓝牙的正确使用,/dev/ttyAMA0则不再为GPIO串口服务,而是为蓝牙模块服务。
- /dev/ttyS0:
被称为"mini uart",此串口代表了"Physical pin 8|10 BCM pin 14|15Wiring Pi pin 15|16".
但是由于次串口波特率收到cpu频率影响,并不稳定,所以实际上无法被用来串口通信。
workaround思路:将ttyAMA0和ttyS0互换,那么gpio tx
x串口映射给ttyAMA0,ttyS0则映射给蓝牙设备。
这样gpio 14、15串口就拥有了稳定,强大的通信功能。
而蓝牙串口则无法正常使用。
0x01 激活串口功能
$ sudo nano /boot/config.txt
改变使得:enable_uart=1.
若无此参数,则在最后一行添加:enable_uart=1.
重启设备。
0x02 查看串口别名
ls -l /dev
会发现:
lrwxrwxrwx 1 root root 7 Aug 28 07:41 serial0 -> ttyS0
lrwxrwxrwx 1 root root 5 Aug 28 07:41 serial1 -> ttyAMA0
0x02 禁用/dev/ttyS0的console功能
$ sudo systemctl stop serial-getty@ttyS0.service
$ sudo systemctl disable serial-getty@ttyS0.service
并且修改cmdline.txt文件
$ sudo nano /boot/cmdline.txt
删除“console=serial0,115200”,保存并重启
0x03 交换串口
$ sudo nano /boot/config.txt
在最下面添加:dtoverlay=pi3-miniuart-bt
保存并重启。
此时查看串口别名则发现:
lrwxrwxrwx 1 root root 7 Aug 28 07:41 serial0 -> ttyAMA0
lrwxrwxrwx 1 root root 5 Aug 28 07:41 serial1 -> ttyS0
此时,ttyAMA0串口可以正常用于串口通信,ttyS0则无法被用于串口通信,蓝牙功能失效。
参考:
https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/#History