当前位置:   article > 正文

树莓派4B串口配置_树莓派串口

树莓派串口

树莓派环境

硬件:树莓派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这行代码,需要注释掉;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

6.重启树莓派;

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

 若出现以下一行内容,则说明配置成功:

  /dev/ttyAMA0         /dev/ttyAMA1          /dev/ttyAMA2          /dev/ttyAMA3        /dev/ttyAMA4
  • 1
  • 2
  • 3

硬件串口(/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
  • 1

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

sudo raspi-config
  • 1

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

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

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

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

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

然后执行以下步骤

cd /boot/firmware
  • 1
sudo gedit config.txt
  • 1

在这里插入图片描述

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

然后执行下面的指令

sudo gedit syscfg.txt 
  • 1

在这里插入图片描述

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

然后执行reboot重启

sudo reboot 
  • 1

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

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

执行以下指令

cd /boot/firmware
  • 1
sudo gedit config.txt
  • 1

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

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

sudo systemctl disable bluetooth
  • 1

因为蓝⽛也使⽤硬件串⼝,所以我们在 /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
  • 1

这⾥有个坑要注意⼀下:树莓派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
  • 1
import serial
uart2 = serial.Serial(port="/dev/ttyAMA0", baudrate=9600)
uart2.write("Msg from UART2...".encode("gbk"))
uart2.read(10)
  • 1
  • 2
  • 3
  • 4

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

sudo apt-get update
sudo apt-get install cutecom
sudo cutecom
  • 1
  • 2
  • 3

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

安装minicom

sudo apt-get update
sudo apt-get install minicom
sudo minicom -D /dev/ttyAMA0 -b 115200
  • 1
  • 2
  • 3

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

但是提示报错permission denied:
这是因为权限不够不能打开,因此使用下面的命令提升权限

sudo chmod 777 /dev/ttyAMA0
  • 1

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

minicom -D /dev/ttyAMA0 -b 115200
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/411355
推荐阅读
相关标签
  

闽ICP备14008679号