ubuntu树莓派3/4B+的GPIO硬件串口通信

2023-05-16

目录

  • 一、概要
  • 二、树莓派硬件常识
  • 三、交换硬件串口和mini串口映射关系
    • 3.1 查看原始映射
    • 3.2 编辑config文件,置换硬件映射
    • 3.3 禁用蓝牙
  • 四、串口功能配置
    • 4.1 编辑cmdline文件
    • 4.2 禁用蓝牙
    • 4.3 串口功能配置
  • 五、连接测试
    • 5.1 安装minicom
    • 5.2 与PC联调
    • 5.3 启动minicom
    • 5.4 minicom的基本操作
    • 5.5 连接成功
  • 六、错误排查

一、概要

树莓派3/4B+
melodic ROS+Ubuntu18.04
特别指出,不想要禁用蓝牙功能的树莓派4b请参考树莓派4b专用配置;因个人需求,混用3B和4B的树莓派,所以统一按照下方流程进行配置。

二、树莓派硬件常识

树莓派引脚图
上图是最常见的树莓派通用40pin引脚图,对于树莓派1、2、3、4有以下共同特征:
树莓派外设串口分为两类:

  1. 硬件串口(PL011 UART0)serial1(/dev/ttyAMA0)
    该串口由硬件实现,有单独的波特率时钟源,可靠性高。
  2. mini串口(mini UART1)serial0(/dev/ttyS0)
    该串口没有波特率专用的时钟源,而由CPU内核时钟提供。波特率容易受到内核时钟的影响,性能低,功能简单。
树莓派板载蓝牙模块,默认的硬件串口是分配给蓝牙模块使用的,而性能较差的mini串口是分配给GPIO串口 TXD0、RXD0。

对于树莓派4B,在上述两个串口基础上,新增了4个PL011串口:

UART2:  TXD2-->GPIO0       RXD2-->GPIO1
UART3:  TXD3-->GPIO4       RXD3-->GPIO5
UART4:  TXD4-->GPIO8       RXD4-->GPIO9
UART5:  TXD5-->GPIO12      RXD5-->GPIO13

(此处引用自博主TEDxPY【树莓派 4 UART 多串口配置通信】一文)

总的来说,我们需要将想要用的GPIO14/15口从原有的ttyS0作出如下映射关系转变:
UART0: TXD0 -> GPIO14 RXD0 -> GPIO15 - ttyAMA0
UART1: ttyS0
接线图如下:
在这里插入图片描述

三、交换硬件串口和mini串口映射关系

目的是将硬件串口设置为GPIO的串口,将ttyS0设置为mini串口。

3.1 查看原始映射

打开终端,输入:

ls /dev/tty* -al

我的不知道为什么我的一直看不了别人的类似serial*->tty*的对应关系,但是可以看到ttyS0在ttyAMA0上方,显示如下:
初始串口配置

3.2 编辑config文件,置换硬件映射

不同于树莓派3,树莓派4B有一个firmware文件

sudo nano /boot/firmware/config.txt

打开文件后,找到enable_uart=0这行,用#注释掉。然后在下面加上:

#enable_uart=0
enable_uart=1
dtoverlay=disable-bt //看自己的文件下蓝牙硬件串口失能文件是哪个

许多教程中多是使用pi3-disable-btpi3-miniuart-bt-overlay.dtb,这是将蓝牙串口更换到mini串口,而将硬件串口换给GPIO14/15的配置文件,但是我的firmware下并没有这个文件,而是一个叫disable-bt的文件。

3.3 禁用蓝牙

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

sudo systemctl disable bluetooth

完成后,reboot一下,蓝牙标志应该变灰或者直接没有,再重新查看映射关系:
新的映射
此时我的还是显示不了对应serial几,但是AMA0已经和S0交换位置了。
至此,硬件映射更换完成。

四、串口功能配置

树莓派GPIO的串口默认是用来做控制台使用的,连接PC后用串口助手可以看到开机信息,并能输入账户和密码,进入系统。如果想使用GPIO串口用于通信,控制台功能就会干扰数据传输。所以必须对串口功能进行设置。

4.1 编辑cmdline文件

sudo nano /boot/firmware/cmdline.txt

如果config.txt文件中没有对cmdline文件进行操作,那么直接根据下面的步骤编辑。
特别的,4B刷ubuntu后config文件中有语句cmdline=nobtcmd.txt,此时真正的关于串口控制台的配置在后面这个名称的文件里面。
console=ttyAMA0(或者serial0),115200的语句删除。该文档将变成以下这样:

dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

4.2 禁用蓝牙

sudo systemctl disable bluetooth

在终端输入以上命令禁用掉和蓝牙有关的开机启动。 重启树莓派后应该没有蓝牙标志了。

4.3 串口功能配置

sudo raspi-config

进入树莓派系统配置界面,选择5 Interfacing Options
5
进入6 Serial
6
选择<No>,关闭串口登录功能
no
选择<Yes>,打开硬件串口调试功能
在这里插入图片描述
最终会提示:串口登陆功能失能,串口调试功能使能。
在这里插入图片描述
完成后,重启树莓派更新配置。

五、连接测试

5.1 安装minicom

sudo apt-get install minicom

5.2 与PC联调

根据二中的接线图用usb转ttl模块连接树莓派的gpio与PC,打开串口助手,设置好串口参数。

5.3 启动minicom

minicom -D /dev/ttyAMA0 -b 115200

此时,如果出现提示:

minicom:cannot open /dev/ttyAMA0:permission denied

是权限不够导致的,在终端输入以下命令后重新按照3启动即可。

sudo chmod 777 /dev/ttyAMA0

5.4 minicom的基本操作

首先Ctrl+A 进入功能界面,随后选择
Z键:进入设置菜单
X键:退出minicom

5.5 连接成功

树莓派和PC能互发字符消息。
在这里插入图片描述

六、错误排查

4.3中完成了串口控制台功能的禁用,但是如果没有将4.1 cmdline文件编辑好,那么即使已经可以用硬件串口传输数据了,也会从串口十六进制接收到乱码,字符串显示可以看到是树莓派的开机和登录信息,这些信息会出现在数据传输中,随时中断数据传输。如下图所示:
在这里插入图片描述
在这里插入图片描述
如果出现这种情况,需要根据四中所讲,将所有的cmdline.txt文件或nobtcmd.txt文件中consloe与AMA0相关的都删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu树莓派3/4B+的GPIO硬件串口通信 的相关文章

  • python中关于Opencv中关于矩形的函数总结

    最近处理图像 xff0c 以前用的都是matlab xff0c 现在入手python比较慢 xff0c 这几天看到了很多命名和功能相似的函数 xff0c 作个记录总结一下 只是为了能够看下函数知道它是做什么的 xff0c 因此不会对其用法说
  • 在虚拟机中安装Ubuntu-Docker

    在虚拟机中安装Ubuntu Docker 第一步 安装虚拟机 1 安装虚拟机 xff0c 测试网络联网 图 1 安装ubuntu 图 2 设置系统时间 2 建立快照 建立快照 xff1a 快照001 安装成功 第二步 内核更新 可以通过do
  • Java中的toString()方法

    一 toString 方法介绍 toString 方法是 Object 类中的方法 xff0c toString 方法源代码如下 xff1a 1 getClass getName 返回类的全类名 包名 43 类名 2 Integer toH
  • 二十八. Semaphore的使用详解

    前言 Semaphore的官方注释如下 计数信号量 从概念上讲 xff0c 信号量维护一组许可证 xff08 permits xff09 通常 xff0c 每次调用Semaphore acquire方法时如果已经没有许可证 xff0c 则会
  • FreeRTOS vTaskDelay 卡死

    在Task中使用动态方法创建任务后 xff0c 在任务中调用vTaskDelay卡死 xff0c 然后排查问题 xff0c 定时器工作正常 xff0c 如果不使用vTaskDelay也可以一直运行 解决办法 xff0c 改成在main方法中
  • 图像为什么能相减

    前面提到 xff0c 我们可以把图像看作一个函数 xff0c 函数和函数之间是可以相加的 f x y 61 I 1 x y 43 I 2 x y 那么 xff0c 既然函数可以相加 xff0c 函数也是可以相减的 所以 xff0c 图像之间
  • 分析评估和定位声音质量

    64 author wangdaopo 64 email 3168270295 64 qq com 影响音频质量和稳定性的因素 音质好坏的评价 xff0c 响度 音高 音色 xff0c 测试 xff0c 你的语音引擎是基本可用的 xff0c
  • Linux下Clang-format代码格式化

    64 author wangdaopo 64 email 3168270295 64 qq com 1 Clang format 代码格式化介绍 平时团队进行合作的时候需要注意代码的格式 xff0c 虽然很难统一每个人的编码风格 xff0c
  • OOM问题预防和排查内存泄漏及解决方法

    64 author wangdaopo 64 email 3168270295 64 qq com 理解了这个算法我们就理解了为啥 MySQL 躺着也能中枪了 xff0c 因为它的体积总是最大 xff08 一般来说它在系统上占用内存最多 x
  • API调用次数限制实现

    API调用次数限制实现 在开发接口服务器的过程中 xff0c 为了防止客户端对于接口的滥用 xff0c 保护服务器的资源 xff0c 通常来说我们会对于服务器上的各种接口进行调用次数的限制 比如对于某个 用户 xff0c 他在一个时间段 x
  • 虚拟声卡

    一 虚拟声卡是什么 xff1f 虚拟声卡是一种软件产品 xff0c 它只对声音数字信号进行处理 虽然它不能产生声音 xff0c 但可以用来实现声音的传输 存储或混音等功能 1 xff09 虚拟声卡工作原理 xff1a 虚拟声卡通过软件技术实
  • 常用排查调试工具

    64 author wangdaopo 64 email 3168270295 64 qq com 工具 描述 strace Linux分析程序运行速度瓶颈 strace是个功能强大的Linux调试分析诊断工具 尤其是针对源码不可读或源码无
  • meson是用Python语言开发的构建工具,编译需要Ninja(用C++实现)命令。Meson 旨在开发最具可用性和快速的构建系统。

    目录 一 meson和ninja简介 二 meson构建和ninja编译环境搭建 三 meson构建和ninja编译程序使用步骤 四 项目构建工具Meson PyAnnolib pyBit Open Build Service介绍 五 参考
  • 一套实时音视频传输机制和QOS策略选择及语音视频SDK的选型标准

    64 author wangdaopo 64 email 3168270295 64 qq com 语音视频SDK的选型标准 设备的问题 网络部分 物理场景 一套实时的传输机制 sip是通讯协议 xff0c sip只是信令 xff0c 就是
  • sample.html

    目录 一 Html使用注意 1 二 界面设计 xff08 css xff09 9 三 表单使用 15 Jquery判断表单是否修改 15 表单序列化为json对象 16 json对象转为json字符串 16 json对象赋值到表单 xff0
  • Cgi使用

    目录 一 CGI xff08 通用网关接口 xff09 是外部扩展应用程序与 Web 服务器交互的一个标准接口 1 二 web服务器配置 3 三 Cgi编程 xff08 根据CGI标准 xff0c 编写Web服务器运行时的外部扩展应用程序
  • mmap内存映射在应用和内核/驱动交互,进程间交互,大规模数据传输/大文件读写中的使用

    目录 一 Mmap用途 步骤实例 细节 及相关函数 2 1 mmap函数主要用途有三个 xff08 应用和内核 驱动交互 xff0c 进程间交互 xff0c 大规模数据传输 大文件读写 xff09 2 2 使用步骤 xff1a 所有对mma
  • PID控制器整理分享

    概述 日常开发中 xff0c 常常需要对速度 温度等物理量进行稳态控制 xff0c 而在目前的自动化控制原理中 xff0c 使用最为广泛的方法就是PID控制算法 本文简要整理分享PID控制器的使用 正文 PID控制器 xff0c 即比例 积
  • Markdown插入图片的方法

    Markdown插入图片的方法 Markdown插入图片的语法 xff1a alt 属性文本 图片地址 alt 属性文本 图片地址 34 可选标题 34 说明 xff1a 以感叹号开头 接着一个中括号 接着一个小括号 xff0c 里面放上图
  • SLA的基本概念

    SLA的基本概念 现在的产品和系统都非常的复杂 xff0c 彼此连接依赖越来越复杂 xff0c 为了整体的高速运转 xff0c 对每个部件的稳定性越来越高 xff0c 越来越精密 xff0c 发展到一定程度 xff0c 人力已经无法掌控 x

随机推荐

  • ssh远程登录可能出现的问题以及解决办法

    首先 确保server端的ssh服务是开的 xff08 service shhd start xff09 然后在client端输入 xff1a ssh usrname 64 serverip xff08 远程登录 xff09 scp fil
  • 各种滤波原理

    1 维纳滤波 维纳滤波是一种平稳随机过程的最佳滤波理论 xff0c 换句话说就是在滤波过程中系统的状态参数 xff08 或信号的波形参数 xff09 是稳定不变的 它将所有时刻的采样数据用来计算互相关矩阵 xff0c 涉及到解维纳 xff0
  • MTCNN算法提速应用(ARM测试结果评估)

    经博主测试 xff0c mtcnn原三层网络如果用于工程测试 xff0c 误检情况严重 xff0c 在fddb上测试结果也是 xff0c 经常将手或者耳朵 检测为人脸 xff0c 这个很头疼 xff08 因为标注数据 xff01 xff09
  • 国外知名音频库一站式资料和简介

    Speex Speex http blog csdn net xyz lmn article details 8013490 简介 Speex是一套主要针对语音的开源免费 xff0c 无专利保护的音频压缩格式 Speex工程着力于通过提供一
  • vs2010调试工具栏不可用(变灰)解决办法

    菜单中页不能进行调试 使用vs的命令行工具 在命令行中运行 xff1a devenv ResetSkipPkgs 重新打开vs xff08 注 xff1a 第一次没有关闭vs xff0c 运行这条命令后 xff0c 会新打开vs没有变化 x
  • STM32 抗锯齿中文显示另类方案分享

    STM32 抗锯齿中文显示另类方案分享 最近在玩车载液晶仪表 xff0c 之前用Arduino 43 USART液晶 xff0c 后来发现Arduino性能不够 xff0c 就转向STM32 由于需要在液晶屏上显示手机信息 xff0c 先是
  • [Pixhawk] ardupilot源码windows编译教程

    声明 此教程最开始取自于淘宝商家 xff0c 后查找资料发现淘宝商家取自 怒飞垂云 的教程 xff0c 但原教程中有些冗余和错误导致无法通过编译 xff0c 我做更改整理后发出 xff0c 如有疑问请各位一起讨论 目录 一 建立飞控固件编译
  • pixhawk MP地面站 NTF_LED参数相关

    NeoPixel Copter documentation 这一部分里面的NTF相关参数 xff0c 对应MP地面站里的这几项 不是给外接WS2812设置的 我折腾了一下午 xff0c 再更改了其他一些参数后 xff0c 导致飞控上那个最大
  • 无人机betaflight 地面站遥控器通道最低点不是1000,最高点不是2000,中点不是1500的调整办法

    参考老外的视频 How to fix the endpoints of your Rx channels with RXRANGE in Betaflight or Cleanflight EASY FIX 需要进入CLI界面 xff0c
  • 八皇后详解

    历史 八皇后问题是一个古老而著名的问题 xff0c 是回溯算法的典型例题 该问题是十九世纪著名的数学家高斯1850年提出 xff1a 在8X8格的国际象棋上摆放八个皇后 xff0c 使其不能互相攻击 xff0c 即任意两个皇后都不能处于同一
  • KVM虚拟机创建功能详细讲解

    KVM虚拟机创建功能详细讲解 一 KVM虚拟机创建的用户操作 对于用户或者管理员来说 xff0c 虚拟机的创建有着很多的方法 xff0c 例如 xff1a kvm自带命令行工 具 使用virsh命令来创建 使用具有图形界面的virt man
  • JS中堆和栈

    什么是栈和堆 栈和堆的主要作用存储变量 xff0c 根据变量值得不同存储的位置也不同 在JS中 xff0c 栈主要是存储基本类型的变量 xff0c 包括String Number Boolean Undefined Null 和 对象类型的
  • 实例:Python调用c++文件(参数为指针和数组指针)

    本文作为Python调用c 43 43 的进阶实现 xff0c 简单的实现参考文章Python调用c 43 43 高级 xff08 swig xff09 1 一个小小的工作目标 通过Python调用c 43 43 文件 xff0c 生成一个
  • RT-Thread学习笔记——信号量

    前言 本文讲RT Thread的线程间同步之信号量 xff0c 包括为什么要进行线程间同步 信号量创建与删除 信号量获取与释放以及基于STM32的二值信号量示例和计算型信号量示例 xff0c 采用RTT amp 正点原子联合出品潘多拉开发板
  • ssh Connection closed by remote host解决

    描述 最近某台服务器隔一段时间就会有ssh连接失败的告警 xff0c 但是上去排查的时候会发现ssh并没有连接失败的错误 后来有在ssh的地方添加日志 xff0c 打印错误的输出 xff0c 最终得到的报错Stderr ssh exchan
  • linux-2.6.32.6源码目录结构分析及其driver所占比重

    find maxdepth 1 type d name exec du sh 未编译个目录文件大小 xff1a 423M linux 2 6 32 6 5 8M firmware 1 3M lib 140K init 144K virt 2
  • Formatter(格式化)和 Converter(格式化)

    功能 xff1a Spring框架的功能 xff0c Formatter和Converter均可以将一种对象类型转换成另一种对象类型 区别 xff1a Converter是通用元件 xff0c 可以在应用程序的任意层中使用 Formatte
  • 牛人 就是这样锤炼出来的,中兴资深工程师,嵌入式专家韦东山是这样炼成的!

    导读 xff1a 还在大学的你 xff0c 不知道未来何去何从 xff1f 都说迷茫是大事做不了 xff0c 小事不想做 还在做程序袁的你 xff0c 是不是也想创业 xff1f 程序袁好创业吗 xff1f Linux好学吗 xff1f 学
  • Windows下编译PX4源码并连接simulink

    目录 一 安装UAV支持PX4飞行器支持包二 下载工具链对于2019a对于2021a 三 克隆PX4源码四 构建PX4固件固件的选择编译指令报错的处理 五 MATLAB的Test Connection 一 安装UAV支持PX4飞行器支持包
  • ubuntu树莓派3/4B+的GPIO硬件串口通信

    目录 一 概要二 树莓派硬件常识三 交换硬件串口和mini串口映射关系3 1 查看原始映射3 2 编辑config文件 xff0c 置换硬件映射3 3 禁用蓝牙 四 串口功能配置4 1 编辑cmdline文件4 2 禁用蓝牙4 3 串口功能