树莓派4B串口配置

您所在的位置:网站首页 树莓派3b性能 树莓派4B串口配置

树莓派4B串口配置

2023-06-18 03:19| 来源: 网络整理| 查看: 265

树莓派环境

硬件:树莓派4B 系统:ubuntu22.04

串口信息

树莓派4B一共有6个串口,之前的版本只有2个串口。这6个串口中,有5个时硬件串口,还有个mini串口,这5个硬件串口在我们需要使用外设时。但是,默认情况下,5个默认串口只有1个被启用了,剩下4个都是禁用的。我们要实现树莓派和外设通信,首先必须启用所有串口,接下来就介绍启用串口的方法:

1.打开终端,输入:dtoverlay -a | grep uart,查看树莓派的所有串口资源;

2.可以输入:dtoverlay -h 串口名。来查看特定串口的信息;

3.在终端输入:cd /boot/firmware可进入新的文件路径;

4.在上面路径下输入:sudo gedit config.txt打开txt文件;

5.在文件的末尾加上:

dtoverlay = uart2 dtoverlay = uart3 dtoverlay = uart4 dtoverlay = uart5 如果没有enable_uart = 1这行代码,也要加上,并且如果有enable_uart = 0这行代码,需要注释掉;

6.重启树莓派;

7.之后打开终端,输入:ls /dev/ttyAMA*

若出现以下一行内容,则说明配置成功: /dev/ttyAMA0 /dev/ttyAMA1 /dev/ttyAMA2 /dev/ttyAMA3 /dev/ttyAMA4 硬件串口(/dev/ttyAMA0)

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

GPIO14 = TXD0 -> ttyAMA0 GPIO0 = TXD2 -> ttyAMA1 GPIO4 = TXD3 -> ttyAMA2 GPIO8 = TXD4 -> ttyAMA3 GPIO12 = TXD5 -> ttyAMA4 GPIO15 = RXD0 -> ttyAMA0 GPIO1 = RXD2 -> ttyAMA1 GPIO5 = RXD3 -> ttyAMA2 GPIO9 = RXD4 -> ttyAMA3 GPIO13 = RXD5 -> ttyAMA4

mini串口(/dev/ttyS0)

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

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

注意:树莓派(3/4代)板载蓝牙模块,默认的硬件串口是分配给蓝牙模块使用的,而性能较差的mini串口是分配给GPIO串口 TXD0、RXD0。 在这里插入图片描述 serial0即GPIO映射的串口(TXD0、RXD0),默认是ttyS0,即mini串口。 serial1即板载蓝牙映射的串口,默认是ttyAMA0,即硬件串口。 我们要做的工作是将两者映射互相交换——serial0映射成ttyAMA0,serial1映射成ttyS0。这样串口就稳定了。

串口配置 更改串口映射

打开serial0 终端输入

ls -l /dev

发现只有serial1->ttyAMA0,没有serial0的映射。 执行

sudo raspi-config

如果没有安装raspi-config,按照这里安装

选择Interfacing Options 在这里插入图片描述

选择serial Port 在这里插入图片描述

再选择 否,禁用串口登录功能,将串口用于通信。 在这里插入图片描述

再选择 是,启动串口硬件。 在这里插入图片描述 再选择OK确认 在这里插入图片描述 最后选择finish完成 在这里插入图片描述

然后执行以下步骤

cd /boot/firmware sudo gedit config.txt

在这里插入图片描述

注意不是/boot下的config,而是/boot/firmware下的config 打开文件后,找到enable_uart=0这行,把这行用#注释掉。然后在这行下面加一行,enable_uart=1。

然后执行下面的指令

sudo gedit syscfg.txt

在这里插入图片描述

将里面的enable_uart=0改成enable_uart=1

然后执行reboot重启

sudo reboot

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

调换serial0和serial1的映射 初始是 在这里插入图片描述

执行以下指令

cd /boot/firmware sudo gedit config.txt

在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模块即可进行测试 sudo apt-get install python3-serial 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 没有界面的可以采用minicom进行测试

安装minicom

sudo apt-get update sudo apt-get install minicom sudo 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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3