树莓派环境
树莓派4B
bullseye 11
串口信息
从树莓派的相关资料我们可以看到,树莓派有两个串口可以使用,一个是硬件串口(/dev/ttyAMA0),另一个是mini串口(/dev/ttyS0)。硬件串口有单独的波特率时钟源,性能好,稳定性强;mini串口功能简单,稳定性较差,波特率由CPU内核时钟提供,受内核时钟影响。
树莓派(3/4代)板载蓝牙模块,默认的硬件串口是分配给蓝牙模块使用的,而性能较差的mini串口是分配给GPIO串口 TXD0、RXD0。
serial0即GPIO映射的串口(TXD0、RXD0),默认是ttyS0,即mini串口。
serial1即板载蓝牙映射的串口,默认是ttyAMA0,即硬件串口。
我们要做的工作是将两者映射互相交换——serial0映射成ttyAMA0,serial1映射成ttyS0。
但对于树莓派3串口交换映射的方法就是在/boot/config.txt文件夹最下面加上这两行(前提是打开串口通信功能)
dtoverlay=pi3-miniuart-bt
force_turbo=1
但我们本文的重点并不在树莓派3上,所以在此不在赘述树莓派3的串口配置。
串口配置
在终端输入以下命令
ls -l /dev/serial*
可以看见我们的终端出现以下信息
lrwxrwxrwx 1 root root 7 8月 30 20:42 /dev/serial0 -> ttyS0
lrwxrwxrwx 1 root root 5 8月 30 20:42 /dev/serial1 -> ttyAMA0
但对于有些用户来说serial0并没有显示出来
所以首先我们要让这两个都能看见
在终端输入以下命令配置串口
sudo raspi-config
进入树莓派配置界面,选择第三个Interface Options(对于不同用户来说位置可能不在第三个,但是只要名字对了就行)
确定后进入如下界面,选择Serial Port
先选择关闭串口登录功能,打开硬件串口调试功能
再启用串行端口硬件
最后一直确定yes就ok了
接下来又回到了终端界面,输入
cd /boot
sudo vim config.txt
因为这里我们主要是没有firmware文件,所以就直接进入config.txt就可以了
一直滑到最后将enable_uart=0改为enable_uart=1就可以看见serial0了
可以在终端输入命令再确认一下
ls -l /dev/serial*
交换映射
还是一样在/boot文件夹下打开config.txt
sudo vim config.txt
在此处加上dtoverlay=disable-bt即可
最后禁用蓝牙就ok了
sudo systemctl disable bluetooth
配置完成后重启树莓派
sudo reboot
再在终端查看
ls -l /dev/serial*
就会发现串口映射已经交换成功
lrwxrwxrwx 1 root root 7 8月 30 20:42 /dev/serial0 -> ttyAMA0
lrwxrwxrwx 1 root root 5 8月 30 20:42 /dev/serial1 -> ttyS0