树莓派3b+串口配置

树莓派3b+串口配置前言树莓派从大的方向来说一共出了3代,每一代的CPU外设基本相同,但内核不同,外设里面一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠,mini串口性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此mini串口有个致命的弱点是:波特率受到内核时钟的影响…

大家好,又见面了,我是你们的朋友全栈君。

前言

树莓派从大的方向来说一共出了3代,每一代的CPU外设基本相同,但内核不同,外设里面一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠,mini串口性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此mini串口有个致命的弱点是:波特率受到内核时钟的影响。内核若在智能调整功耗降低主频时,相应的这个mini串口的波特率便受到牵连了,虽然你可以固定内核的时钟频率,但这显然不符合低碳、节能的口号。在所有的树莓派板卡中都通过排针将一个串口引出来了,目前除了树莓派3代以外 ,引出的串口默认是CPU的那个硬件串口。而在树莓派3代中,由于板载蓝牙模块,因此这个硬件串口被默认分配给与蓝牙模块通信了,而把那个mini串口默认分配给了排针引出的GPIO Tx Rx。
树莓派的串口默认为串口终端调试使用,如要正常使用串口则需要修改树莓派设置。关闭串口终端调试功能后则不能再通过串口登陆访问树莓派,只能通过ssh或者远程桌面连接树莓派后进行控制。

下图是树莓派3的接口图
在这里插入图片描述
其中红框中就是引出的串口IO,如果我们需要通过UART外接模块,默认情况下必须得使用性能很低的mini串口了,而且随着内核主频的变化,还会造成波特率的变化导致通信的失败,几乎很难使用。所以我们希望恢复硬件串口与GPIO 14/15的映射关系,使得我们能够通过GPIO使用高性能的硬件串口来连接我们的串口设备。

树莓派系统镜像

2018-11-13-raspbian-stretch-full.img

步骤

1、将树莓派3的硬件串口与mini串口默认映射对换

树莓派可以配置文件来修改设备树,我的理解是可以通过配置文件来修改管脚的映射关系,这在许多Cortex-M3内核的单片机中也很常见,可以将同一个串口映射到不同的管脚上,以方便PCB的布线。

为了在树莓派3中通过GPIO使用高性能的硬件串口,我们必须将分配给蓝牙使用的硬件串口与分配给IO排针的mini串口进行对换,这必然会使得蓝牙模块的功能受到影响,但还好,蓝牙并不是必须的。

首先查看有没有相关文件,执行命令

cd /boot/overlays

在这里插入图片描述
可以看到有 README 和 pi3-miniuart-bt-overlay.dtb 或者是 pi3-miniuart-bt.dtb ,后面的缺了(overlay)但是在README中的解释是相同的,因此,认为是同一文件。
在这里插入图片描述
README文件中说明了此文件的功能是将树莓派3的蓝牙切换到mini串口(ttyS0),并且恢复硬件串口(ttyAMA0)到GPIO14&15引脚中。
在这里插入图片描述

2、查看并修改串口映射关系

首先在树莓派命令终端中通过命令查看树莓派3当前的串口映射关系,执行命令

ls -l /dev

在这里插入图片描述
红框里面表示串口映射,有的可能只显示1个,没关系,修改之后两个就都显示出来了。
红色框中体现的应该是一种映射关系,此处暂时没有做深究,简单理解 serial0 就是GPIO映射的串口,此时GPIO映射的串口是默认的/dev/ttyS0这个mini串口。

3、现在来修改配置文件

执行命令

sudo nano /boot/config.txt

在这里插入图片描述
在该文件中加一行代码

dtoverlay=pi3-miniuart-bt

在这里插入图片描述
然后”ctrl+o”保存文件, 执行sudo reboot重启树莓派,使修改生效。一定要保存然后重启

4、再通过 ls -l /dev 命令查看修改后的映射关系

在这里插入图片描述
对比修改前的关系,可以看出serial0和serial1 与 ttyAMA0和ttyS0的映射关系对换完成了,也就是ttyAMA0映射到了引出的GPIO Tx(14) Rx(15) 引脚上。

5、禁用串口的控制台功能

前面的步骤已经交换了硬件串口与mini串口的映射关系,但现在想使用树莓派外接串口模块进行通信还不行,因为树莓派IO引出的串口默认是用来做控制台使用的,它的初衷是为了在没有网络接口时,通过串口对树莓派进行相关的配置。因此需要禁用这个默认功能,使得串口为我们自由使用。

在树莓派命令窗口中分别通过如下两个命令停止和禁用串口的控制台功能。
由于我们前面已经交换了串口的映射关系,因此这里注意是ttyAMA0。

sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service

再执行命令:

sudo nano /boot/cmdline.txt

然后看到里面类似如下的内容
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
删除语句 console=serial0,115200
剩下的内容类似如下:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
然后重新启动树莓派,使修改生效。一定要保存然后重启

到这里,树莓派3b+的串口配置就配置了可以直接用了,下面我们用python-serial模块做一个“树莓派串口与电脑usb-ttl串口通信”的测试。

1、首先将树莓派的串口和usb-TTL串口连接好,并将usb-TTL串口插到电脑端上。
2、安装python-serial模块,一般都是树莓派系统默认已经安装好,可以直接跳过该步骤。

 sudo apt-get install python-serial  

3、输入phthon3启动python IDE。
4、创建serial实例ser,端口为 ‘/dev/ttyAMA0’,波特率设置为115200bps,第三个为校验位,可以不写。

>>> import serial
>>> ser = serial.Serial('/dev/ttyAMA0',115200)

5、检验串口是否打开,若未打开则输入 ser.open() 打开

>>> ser.isOpen()  
True 

6、电脑上打开设备管理器查看usb-TTL的串口号。
在这里插入图片描述
7、电脑上打开串口调试助手,选择刚刚查看的串口,波特率选择“115200”。
我用的串口助手是“STC-ISP下载软件”里面的串口助手。
在这里插入图片描述
8、然后我们在树莓派的python里发消息,检测发送是否正常:

>>> ser.write(b'Raspberry pi')
12

在这里插入图片描述
可以看到正常接收。
9、最后我们写一个python脚本代码,实现串口的发送和接收:

# -*- coding: utf-8 -*
import serial
import time
ser = serial.Serial('/dev/ttyAMA0', 115200)
if ser.isOpen == False:
    ser.open()                # 打开串口
ser.write(b"Raspberry pi is ready")
try:
    while True:
        size = ser.inWaiting()               # 获得缓冲区字符
        if size != 0:
            response = ser.read(size)        # 读取内容并显示
            print response        
            ser.flushInput()                 # 清空接收缓存区
            time.sleep(0.5)                  # 软件延时
except KeyboardInterrupt:
    ser.close()

将以上代码保存为“test_uart_python.py”,然后执行python test_uart_python.py运行树莓派端的python程序,我们试着发送一串消息过去。

在这里插入图片描述

参考文献

1、浅尝树莓派3之串口配置 – qq_31396093的博客 – CSDN博客
2、树莓派3b与电脑串口互相通信进行数据传输的配置过程 – 全都不是泡沫 – CSDN博客
3、树莓派通过串口接发数据(serial版) – 姜亚轲的博客 – CSDN博客
4、WiringPi/serialRead.c at master · WiringPi/WiringPi

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152908.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月25日 下午2:16
下一篇 2022年6月25日 下午2:16


相关推荐

  • QoS的基本原理

    QoS的基本原理1 前言 QoS QualityofSer 是服务质量的简称 对于网络业务来说 服务质量包括哪些方面呢 从传统意义上来讲 无非就是传输的带宽 传送的时延 数据的丢包率等 而提高服务质量无非也就是保证传输的带宽 降低传送的时延 降低数据的丢包率以及时延抖动等 广义上讲 服务质量涉及网络应用的方方面面 只要是对网络应用有利的措施 其实都是在提高服务质量 因此 从这个意义上来说 防火墙

    2026年3月19日
    2
  • softreference 回收_method verification

    softreference 回收_method verification一、softReference的作用    SoftReference的主要特点就是在当内存不够的时候,GC会回收SoftReference所引用的对象。所以,在memorysensitive的项目中将某些数据设置成SoftReference可以避免内存的溢出。1、创建一个SoftReferenceSoftReference>softReference=newSof

    2025年10月8日
    10
  • android怎样开启root权限管理,手机怎样开启root权限(最新安卓手机一键root教程)…

    android怎样开启root权限管理,手机怎样开启root权限(最新安卓手机一键root教程)…对于安卓手机用户来说 root 权限这个词应该不陌生 在使用手机的过程中 用户难免需要增删一些内容 但是有时候手机就会跳出 需要 root 权限 这样的字眼 这是怎么回事呢 其实是因为有些手机厂商为了方便推广某些软件 一般都会在手机里植入相应的推广软件 用户如果没有获取 root 权限 一般是无法删除那些不喜欢的自带软件的 所以说 不少安卓手机用户都需要面临 root 权限的问题 那么 安卓手机怎么 root 呢

    2026年3月19日
    2
  • 31省“5G应用”主攻方向+责任单位一览!

    31省“5G应用”主攻方向+责任单位一览!31 省 5G 应用 主攻方向 责任单位一览 一 北京市主攻五大类 5G 应用主攻方向 1 自动驾驶主攻方向 2 健康医疗主攻方向 3 工业互联网主攻方向 4 智慧城市主攻方向 5 超高清视频二 上海市主攻十大类 5G 应用主攻方向 1 5G 智能制造主攻方向 2 5G 智慧交通主攻方向 3 5G 智慧枢纽主攻方向 4 5G 智慧医疗主攻方向 5 5G 金融服务主攻方向 6 5G 智慧教育主攻方向 7 5G 文创体育主攻方向 8 5G 智慧旅游主攻方向 9 5G 城市管理主攻方向 10 5G 智慧民生三 天津市主攻十大类 5G 应用主攻方向 1 智慧城市

    2026年3月26日
    2
  • 腾讯云官宣模型调用涨价

    腾讯云官宣模型调用涨价

    2026年3月12日
    2
  • python-def函数的定义

    python-def函数的定义无参定义函数 1 语法 deffunction name expressionsP 使用 def 开始函数定义 紧接着是函数名 括号内部为函数的参数 内部为函数的具体功能实现代码 如果想要函数有返回值 在 expressions 中的逻辑代码中用 return 返回 2 实例 deffunction print Thisisafunct a 1 2print a 上面我们定义了一个名字为 fun

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号