【树莓派4B】串口配置

【树莓派4B】串口配置

  • 树莓派环境
  • 串口信息
    • 硬件串口(/dev/ttyAMA0)
    • mini串口(/dev/ttyS0)
  • 串口配置
    • 打开serial0
    • 调换serial0和serial1的映射
  • 测试
    • 使用python的pyserial模块即可进行测试
    • 有界面的可以使用cutecom串口工具进行测试
    • 没有界面的可以采用minicom进行测试
  • 参考

树莓派环境

树莓派4B
ubuntu mate20

串口信息

硬件串口(/dev/ttyAMA0)

该串口由硬件实现,有单独的波特率时钟源,性能高、可靠。

mini串口(/dev/ttyS0)

该串口性能低,功能也简单,并且没有波特率专用的时钟源,而是由CPU内核时钟提供。因此mini串口有个致命的弱点是:波特率受到内核时钟的影响。

也就是说,和CPU共用同一时钟,当CPU处理较多任务时,或者低功耗时,你的串口波特率不是稳定的,数据误传、传丢就会成为常态。

注意:树莓派(3/4代)板载蓝牙模块,默认的硬件串口是分配给蓝牙模块使用的,而性能较差的mini串口是分配给GPIO串口 TXD0、RXD0。
【树莓派4B】串口配置_第1张图片

serial0即GPIO映射的串口(TXD0、RXD0),默认是ttyS0,即mini串口。
serial1即板载蓝牙映射的串口,默认是ttyAMA0,即硬件串口。
我们要做的工作是将两者映射互相交换——serial0映射成ttyAMA0,serial1映射成ttyS0。这样串口就稳定了。

串口配置

打开serial0

终端输入ls -l /dev,发现只有serial1->ttyAMA0,没有serial0的映射。
执行

sudo raspi-config

如果没有安装raspi-config,按照这里安装
【树莓派4B】串口配置_第2张图片
选择Interfacing Options
【树莓派4B】串口配置_第3张图片
选择serial

再选择 否,禁用串口登录功能,将串口用于通信。

再选择 是,启动串口硬件。

然后执行以下步骤

cd /boot/firmware
sudo gedit config.txt

【树莓派4B】串口配置_第4张图片
注意不是/boot下的config,而是/boot/firmware下的config
打开文件后,找到enable_uart=0这行,把这行用#注释掉。然后在这行下面加一行,enable_uart=1。

然后执行下面的指令

sudo gedit syscfg.txt 

【树莓派4B】串口配置_第5张图片
将里面的enable_uart=0改成enable_uart=1

然后执行reboot重启

sudo reboot 

重启树莓派,再看ls -l /dev , serial0->ttyS0就出现了。

调换serial0和serial1的映射

初始是
在这里插入图片描述
执行以下指令

cd /boot/firmware
sudo gedit config.txt

【树莓派4B】串口配置_第6张图片

在config.txt的结尾加上dtoverlay=disable-bt

然后在终端输入以下命令禁用掉和蓝牙有关的开机启动项

sudo systemctl disable bluetooth

因为蓝⽛也使⽤硬件串⼝,所以我们在 /boot/config.txt⾥⾯加上 dtoverlay=disable-bt ,ttyAMA0 得以释放,这时候树莓派也⾃动交换了ttyAMA0和ttyS0,把serial0 分配给了 ttyAMA0 。

映射对换的⽬的是将硬件串⼝作⽤在GPIO接⼝的Tx Rx上。我这里没有⽤到蓝⽛通讯,所以禁⽤蓝⽛后也没有再次开启,也没有测试再次开启蓝⽛通讯是否正常,如果你们那里有⽤到蓝⽛通讯,那么进⾏这⼀步的时候要谨慎。
修改系统配置⽂件/boot/config.txt
sudo vi /boot/config.txt
在⽂件中添加:
dtoverlay=disable-bt

这⾥有个坑要注意⼀下:树莓派3的参数值是pi3-disable-bt。在树莓派4B上⽤pi4-disable-bt,是不⾏的,有的人说在4B上依旧写pi3-disable-bt后成功了。具体我没有测试。我这里直接写dtoverlay=disable-bt是成功的。

重启树莓派,应该没有蓝牙标志了,serial0和serial1也调换为:

在这里插入图片描述

测试

使用python的pyserial模块即可进行测试

import serial
uart2 = serial.Serial(port="/dev/ttyAMA0", baudrate=9600)
uart2.write("Msg from UART2...".encode("gbk"))
uart2.read(10)

有界面的可以使用cutecom串口工具进行测试

sudo apt-get update
sudo apt-get install cutecom
sudo cutecom

【树莓派4B】串口配置_第7张图片

没有界面的可以采用minicom进行测试

安装minicom

sudo apt-get update
sudo apt-get install minicom
minicom -D /dev/ttyAMA0 -b 115200

其中-D表示选择串口**/dev/ttyAMA0**,-b 设置波特率为115200,此参数可以不用设置,默认115200。

但是提示报错permission denied:
在这里插入图片描述
这是因为权限不够不能打开,因此使用下面的命令提升权限

sudo chmod 777 /dev/ttyAMA0

然后重新调用命令,不会报错:

minicom -D /dev/ttyAMA0 -b 115200

【树莓派4B】串口配置_第8张图片

参考

树莓派4B串口配置
树莓派4B没有serial0或ttyS0,serial0没有映射到ttyS0,serial0和serial1调换映射
树莓派4b串口设置教程(适用于新手)

树莓派4B(Ubuntu mate)没有serial0的问题

树莓派4b串口(UART)使用问题的解决方法 - Ubuntu 21.04
树莓派(十一)树莓派4B ubuntu20.04 UART 多串口配置通信
树莓派4BGPIO串口通讯设置(3B+通用)
树莓派开发笔记(六):GPIO口的UART的使用(串口通讯)
树莓派4B UART串口的配置
树莓派软串口设置+完整示例pigpio猪皮库

你可能感兴趣的:(树莓派ubuntu,架构,arm开发,硬件工程)