赞
踩
硬件:树莓派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
该串口由硬件实现,有单独的波特率时钟源,性能高、可靠。
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
该串口性能低,功能也简单,并且没有波特率专用的时钟源,而是由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也调换为:
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)
sudo apt-get update
sudo apt-get install cutecom
sudo cutecom
安装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 © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。