赞
踩
树莓派CPU内部有两个串口,一个是硬件串口(官方称为PL011 UART),一个是迷你串口(官方成为mini-uart)。在树莓派2B/B+这些老版树莓派上,官方设计时都是将“硬件串口”分配给GPIO中的UART(GPIO14&GPIO15),因此可以独立调整串口的速率和模式。而树莓派3的设计上,官方在设计时将硬件串口分配给了新增的蓝牙模块上,而将一个没有时钟源,必须由内核提供时钟参考源的“迷你串口”分配给了GPIO的串口,这样以来由于内核的频率本身是变化的,就会导致“迷你串口”的速率不稳定,这样就出现了无法正常使用的情况。
目前解决方法就是,关闭蓝牙对硬件串口的使用,将硬件串口重新恢复给GPIO的串口使用,也就意味着树莓派3的板载蓝牙和串口,只能二选一使用。
树莓派GPIO中串口的管脚在p6、p8和p10:
1).下载 pi3-miniuart-bt-overlay 文件,解压出pi3-miniuart-bt-overlay.dtb文件,并将dtb文件拷贝到/boot/overlays/目录下。编辑/boot目录下的config.txt文件
sudo vim /boot/config.txt
添加:
dtoverlay=pi3-miniuart-bt-overlay
force_turbo=1 #此行貌似不是必须??
通过 ls -l /dev 命令查看修改后的映射关系:
对比修改前的关系,可以看出serial0和serial1 与 ttyAMA0和ttyS0的映射关系对换完成了,也就是ttyAMA0映射到了引出的GPIO Tx Rx上。
2).关闭板载蓝牙的:
sudo systemctl disable hciuart
sudo vim /lib/systemd/system/hciuart.service
将 “ttyAMA0”修改为“ttyS0”:
3).修改cmdline.txt
sudo vim /boot/cmdline.txt
删除以下部分
console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
最终变为
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
4).禁用串口的控制台功能
前面的步骤已经交换了硬件串口与mini串口的映射关系,但现在想使用树莓派外接串口模块进行通信还不行,因为树莓派IO引出的串口默认是用来做控制台使用的,它的初衷是为了在没有网络接口时,通过串口对树莓派进行相关的配置。因此需要禁用这个默认功能,使得串口为我们自由使用。
在树莓派命令窗口中分别通过如下两个命令停止和禁用串口的控制台功能
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
5).重新启动树莓派,使修改生效。
sudo reboot
查看串口配置:
stty -a -F /dev/ttyTHS2
设置临时波特率:
stty -F /dev/ttyTHS2 115200
发送字符串:
echo hello > /dev/ttyAMA0
参考文献:
树莓派相关-树莓派串口配置方法
浅尝树莓派3之串口配置
树莓派串口(UART)编程Python示例
树莓派3串口(UART)使用问题的解决方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。