树莓派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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 85℃蛋糕店_蛋糕吧

    85℃蛋糕店_蛋糕吧题目描述今天是路路的生日,生日蛋糕自然是少不了。路路的朋友们一起去蛋糕店来买蛋糕,可是等一行人到了蛋糕店之后,发现那里是人山人海啊-_-。这下可把店家给急坏了,因为人数过多,需求过大,所以人们要等好长时间才能拿到自己的蛋糕。老板为了最大限度的使每位客人尽快拿到蛋糕,因此他需要安排一个制作顺序,使每位客人的平均等待时间最少(如果制作时间相同的,先来的先做)。这使他发愁了,于是他请你来帮忙安排一个…

    2025年7月5日
    6
  • linux安装pycharm全部过程「建议收藏」

    linux安装pycharm全部过程「建议收藏」一,安装文件传到虚拟机里在安装包目录下打开管理员小黑窗(安装包我会放在分享里,可以免费下载)scppycharm-community-2018.2.4.tarayh@192.168.66.130注:scp传输文件//pycharm-community-2018.2.4.tar文件名ayh为虚拟机名字//192.168.66.13…

    2022年10月19日
    4
  • OpenSearch 简单学习

    OpenSearch 简单学习OpenSearch 简单学习项目中用到了阿里云的开放搜索 进行一下总结 OpenSearch 基于阿里巴巴自主研发的大规模分布式搜索引擎平台 该平台承载了阿里巴巴全部主要搜索业务 包括淘宝 天猫 一淘 1688 ICBU 神马搜索等业务 OpenSearch 以平台服务化的形式 将专业搜索技术简单化 低门槛化和低成本化 让搜索引擎技术不再成为客户的业务瓶颈 以低成本实现产品搜索功能并快速迭代

    2025年7月5日
    5
  • SPSS步骤|卡方检验详细操作和结果分析「建议收藏」

    SPSS步骤|卡方检验详细操作和结果分析「建议收藏」​卡方检验是很常用的一种分析方法,什么情况下使用卡方检验?如果你手上的数据是一种定类数据,比如性别(男、女)是否患病(是、否)。你还想要分析定类数据和定类数据之间的差异关系。例如想要分析性别和是否抽烟之间的关系。这一句话里面包含两个词语,分别是:性别,是否抽烟。性别为X,是否抽烟为Y。性别为定类数据,是否抽烟也是定类数据,此时就可以使用卡方检验。这篇文章分享分别使用两种常见统计分析工具SPSS和SPSSAU完成卡方检验。SPSS是目前常用的统计软件,SPSSAU是更简单的在线数据科学分析工具

    2022年5月17日
    119
  • 软件测试流程及规范(参考大华为的规范)

    软件测试流程及规范(参考大华为的规范)参考某大佬(窝真不知道是哪位大佬)总结的测试流程并结合在华为做测试学到的规范,整理的我们公司的测试流程,分享是一种美德,so开始你的阅读吧~软件测试流程及规范一、目标制定完整且具体的测试路线和流程,为快速、高效和高质量的软件测试提供基础流程框架。最终目标是实现软件测试规范化、标准化。二、测试流程说明三、需求分析需求分析由SA制定,要求细化每一个功能的细节,每一个按钮的位置以及边界范围,对于稍大或稍…

    2022年5月4日
    150
  • 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    2020年11月19日
    220

发表回复

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

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