树莓派4B+Ubuntu22.04串口通信

1 引言

硬件:树莓派4B 8GB  和 STM32 H743(已经烧录了 uart 收发程序)

系统:Ubuntu22.04

语言:python  (vscode 远程 )

需求:实现树莓派和32的串口通信

2 过程记录

2.1 树莓派串口学习

树莓派 | 串口02 - 树莓派4B上打开另外4路硬件串口_树莓派4b 在吗使用ttyama2串口-CSDN博客

树莓派4 UART 多串口配置通信 | 树莓派实验室 (nxez.com)

树莓派4B-串口、多串口配置及详细使用攻略_树莓派扩展多个串口-CSDN博客

树莓派串口的使用 - 知乎 (zhihu.com)

在Ubuntu22.04条件下,如何打开树莓派4B的串口_树莓派4b ubuntu系统打开ttyama1-CSDN博客

树莓派共有两种类型的串口控制器,如下:

树莓派串口类型
串口控制器类型接口Pi 4B比较
mini UART/dev/ttyS01个

mini串口功能简单,稳定性较差,波特率由CPU内核时钟提供,受内核时钟影响

PL011 硬件UART/dev/ttyAMA05个硬件串口有单独的波特率时钟源,性能好,稳定性强

相比树莓派0、1、2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4B 中新增了 4 个 PL011 串口共计有 6 个 UART。6个UART,其中5个是硬件UART,可以使用这5个硬件UART稳定地与外部的设备进行通讯。1个是mini UART。

在树莓派4B中,由于板载蓝牙模块,因此硬件串口UART1(ttyAMA0接口)被默认分配给蓝牙模块通信,mini串口开启的是ttyS0接口,默认分配给排针引出的GPIO TX  RX,这个接口非常不稳定,几乎不能传送正确的数据。

结论:

(1)把默认分配给蓝牙的ttyAMA0硬件串口和mini串口默认映射对换,适用于4B及之前0 1 2 3代树莓派,这样会导致蓝牙被禁用

注:结论1的步骤操作如下:

sudo nano /boot/firmware/config.txt    #进入nano模式修改配置文件

在配置文件中增加如下内容,打开ttyS0->mini uart:

然后重启,命令sudo reboot

使用命令查看设备文件:

ls -l /dev

效果如下:

下面调换serial0和serial1的映射:

再次修改配置文件,这回在config.txt文件中加入如下内容

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

sudo systemctl disable bluetooth

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

(2)用ttyAMA1或ttyAMA2或ttyAMA3或ttyAMA4硬件串口,适用于4B型号,之前的型号我不下结论,因为我没用过,按照网上的资料应该是不适用的,因为他本身就没有那么多硬件串口,我建议看到文章的小伙伴命令行看一下到底有几个串口

(3)我用的(2),因为我不知道后面会不会用到蓝牙,既然有其他的硬件串口干脆用其他的硬件串口就好了

查看4B上所有的串口资源:

dtoverlay -a | grep uart

查看某个串口信息:

dtoverlay -h uart0

 查看设备文件命令:

ls -l /dev

2.2 配置开启UART2 3 4 5

进入nano模式准备修改配置文件:

sudo nano /boot/firmware/config.txt  #(ubuntu是这个,raspiberrypi是/boot/config)

在配置文件中增加如下内容:

重启后查看是否生效:

sudo reboot     #重启
ls /dev/ttyAMA*  #查看有几个硬件串口

各 UART 串口与 GPIO(对应的是BCM编码) 对应关系:

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

注1:如果没有对换映射,则是:

        UART0 对应 ttyS0,UART1 对应 ttyAMA0,这俩是默认的

        UART2 对应 ttyAMA1, UART3 对应 ttyAMA2, UART4 对应 ttyAMA3,

        UART5 对应 ttyAMA4.

注2:如果按照结论1对换映射,那么应该是:  

        UART0 对应 ttyAMA0,UART1 对应  ttyS0,已对换

        UART2 对应 ttyAMA1, UART3 对应 ttyAMA2, UART4 对应 ttyAMA3,

        UART5 对应 ttyAMA4.

2.3  UART2 测试

对UART2进行自收自发测试如下:

硬件连线上,需要将GPIO0和GPIO1连接起来

引自树莓派 4 UART 多串口配置通信_树莓派与服务器的多端口通信-CSDN博客

代码方面:

 python 进行串口通信,依赖包是pyserial

我在项目的虚拟环境下 把串口的三方库pip到本地仓库,方便在项目文件中import使用

命令如下:

pip install pyserial

定义串口并发送:

报错:权限不够

办法:

/dev/ttyUSB0 permission denied 解决方案-CSDN博客

按上述命令修改完用户权限后重启,权限问题解决

然后开启两个终端,一个运行py程序,一个接收,如下,UART2测试成功

UART3 UART4 和UART5的自收自发测试类似,只是引脚不同,参考前文引脚图连线可完成串口3-5的自收自发测试,目前我只需要用到一个串口,其他的就不测了.

2.4 python代码

待续

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值