树莓派3B+ubuntu系统串口调试

零. 介绍

树莓派有2个串口:硬件串口(/dev/ttyAMA0)和mini串口(/dev/ttyS0)
**PL011 UART(硬件串口):**有单独的波特率时钟源,性能高、可靠
**mini UART(mini串口):**性能低,功能简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此波特率受到内核时钟的影响,内核若在智能调整功耗降低主频时,相应的这个mini串口的波特率便受到牵连。另,mini UART串口的FIFO缓冲区比PL011 UART小,这可能会导致波特率较高时使丢失字符。
*默认情况下,mini UART映射到40引脚GPIO连接器的TXD(GPIO 14)和RXD(GPIO 15)上,PL011 UART用于蓝牙模块​​,但是任何一个模块都可以映射到GPIO端口。
故需要重新配置串口

一. 启用树莓派的mini UART串口

默认情况下mini UART用于登录连接控制树莓派,比如用Putty,这时mini UART不能用于通信,所以先要启用mini UART的通信功能。

  1. 查看引脚配置
gpio readall

树莓派3B+ubuntu系统串口调试_第1张图片

  1. 查看默认的映射关系,查看设备文件:
ls -l /dev

在这里插入图片描述
可见,mini UART没打开串口功能的情况,只有serial1(蓝牙)默认使用的是PL011 UART (ttyAMA0)硬件串口。
3. 打开mini UART串口
接下来打开GPIO串口,这个就不贴图了,比较简单。执行

sudo raspi-config

找到Interfacing选项,找到serial,第一个提选NO,第二个提问选YES 最后选择finish。会提示让重启,重启一下来重新看下映射关系:

然后再次ls -l /dev/serial*就可以看到正确的映射关系
树莓派3B+ubuntu系统串口调试_第2张图片
serial0(GPIO串口已启用)使用的是ttyS0设备(mini串口),serial1(蓝牙)使用的是ttyAMA0设备(硬件串口PL011)。

二. 交换串口映射关系

GPIO引脚(serial0)对应的串口是mini UART,蓝牙(serial1)对应的串口是PL011 UART。想要通过树莓派的GPIO引脚进行稳定的串口通信,需要交换串口的映射关系。

  1. 查看设备树文件
    对于2016年3月18日之后的Raspbian Linux版本中,有一个名为pi3-miniuart-bt的设备树文件用于交换串口映射。用下面的命令查看:
ls -l /boot/overlays/pi3-miniuart-bt*

在这里插入图片描述
随版本不同有文件/boot/overlays/pi3-miniuart-bt-overlay.dtb或者文件/boot/overlays/pi3-miniuart-bt.dtbo。

启用该文件只需在/boot/config.txt文件末尾添加一行代码。

编辑该文件:

sudo gedit /boot/config.txt

在末尾添加一行代码:

dtoverlay=pi3-miniuart-bt

修改完以后重启系统:

sudo reboot

再查看串口映射关系,已经换过来了。

查看串口对应的GPIO引脚。用下面的命令查看所有引脚的状态:

pi@raspberrypi:~ $ gpio readall

串口对应的引脚是Pin8(TXD, GPIO14)和Pin10(RXD, GPIO15)。

三. 禁用串口的控制台功能

前面的步骤已经交换了硬件串口与mini串口的映射关系,但现在想使用树莓派外接串口模块进行通信还不行,因为树莓派IO引出的串口默认是用来做控制台使用的,它的初衷是为了在没有网络接口时,通过串口对树莓派进行相关的配置。因此需要禁用这个默认功能,使得串口为我们自由使用。

在树莓派命令窗口中分别通过如下两个命令停止和禁用串口的控制台功能。
由于我们前面已经交换了串口的映射关系,因此这里注意是ttyAMA0。

sudo systemctl stop [email protected]
sudo systemctl disable [email protected]

再执行命令:

sudo gedit /boot/cmdline.txt

然后看到里面类似如下的内容

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 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

然后重新启动树莓派,使修改生效。一定要保存然后重启。

四. 串口测试(树莓派,win10系统互连)

使用ch340连接树莓派与电脑,参考第一部分树莓派引脚与ch340引脚连接“TXD”和“RXD”。
win10系统安装XCOM
树莓派Ubuntu系统安装cutecom

sudo apt-get install cutecom

1.先获取权限,否则后面代码会报错
(1)临时解决

sudo chmod 777 /dev/ttyAMA0

(2)完全解决
①.tty属于“dialout”组别,比如用户名是name,先查看下用户隶属的组别

groups name

②如果没有隶属“dialout”,那么把用户加入进去

sudo gpasswd --add name dialout

③.重启或重新登陆

reboot

2.接线
通过ch340连接树莓派与电脑,树莓派TXD接ch340RXD,树莓派RXD接ch340TXD,连接地线GND。

3.Xcom和cutecom收发
打开windows系统Xcom和树莓派Ubuntu系统cutecom
界面默认设置即可(两端波特率,位数需一致)
收发测试

参考:树莓派3b+串口配置https://javaforall.cn/152908.html
https://blog.csdn.net/oXiaoLingTong/article/details/123583263
树莓派4BGPIO串口通讯设置(3B+通用)https://baijiahao.baidu.com/s?id=1715829744283874146&wfr=spider&for=pc
树莓派3B/3B+的串口使用https://www.jianshu.com/p/d55de3a7d440

你可能感兴趣的:(机器人+树莓派,ubuntu,单片机,linux)