树莓派与STM32之间串口通信

news2025/1/18 1:57:45

目录

一、树莓派串口通信模块介绍

二、树莓派蓝牙、串口引脚映射对换步骤

1.启动串口

2. 禁用蓝牙(硬件串口与mini串口映射对换)

3.验证是否交换成功

三、树莓派安装mini串口调试助手

四、树莓派与电脑串口调试

五、树莓派与STM32串口调试


一、树莓派串口通信模块介绍

树莓派串口通信与蓝牙模块的基本介绍

树莓派3/4B有两个串口,分别为 “硬件串口”/dev/ttyAMA0 和“mini串口” /dev/ttyS0

“硬件串口”有单独的波特率时钟源,性能高、可靠,“mini串口”性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此“mini串口”有个致命的弱点是:波特率受到内核时钟的影响,内核若在智能调整功耗降低主频时,相应的这个mini串口的波特率便受到牵连。

简单概括来说:“硬件串口”是全功能的,而“mini串口则是阉割过的。

在实际项目中遇到的问题是,如果使用“mini串口”/dev/ttyS0,在通讯需要奇偶校验时会报错。所以项目中为了稳定还是推荐使用“硬件串口” /dev/ttyAMA0

在树莓派3/4B中,由于板载蓝牙模块,因此这个“硬件串口”被默认分配给与蓝牙模块通信了,而把“mini串口”默认分配给了排针引出的GPIO Tx Rx。在开启串口通讯不做任何设置的时候,默认的串口通讯使用的是“mini串口”。

因此,如果要在项目中使用,为了通讯稳定,需要进行“硬件串口”与“mini串口”默认映射对换,把“硬件串口”/dev/ttyAMA0映射分配给GPIOTx Rx

二、树莓派蓝牙、串口引脚映射对换步骤


1.启动串口

首先打开此设置界面

然后选择此界面:

此举是将串口打开,点击OK,再重启树莓派。

2. 禁用蓝牙(硬件串口与mini串口映射对换)

映射对换的目的是将硬件串口作用在GPIO接口的Tx Rx上。我的项目上没有用到蓝牙通讯,所以禁用蓝牙后也没有再次开启,也没有测试再次开启蓝牙通讯是否正常,如果项目中有用到蓝牙通讯,那么进行这一步的时候要谨慎。

打开终端输入:

ls /dev -al 

查看所有串口映射,下拉找到这一行,如下图所示:

此时我们可以发现我们的serial0,也就是主串口映射为ttyS0,也就是主串口指向的是mini串口,前文我们提到mini串口效率低不稳定,所以这里我们需要将主串口指向硬件串口,也就是ttyAMA0

打开终端,输入:

sudo nano /boot/config.txt

滚轮到末尾最下方,加入内容:

dtoverlay=pi3-disable-bt

这样,ttyAMA0 得以释放,这时候树莓派也自动交换了ttyAMA0ttyS0,把serial0 分配给了 ttyAMA0

3.验证是否交换成功

打开终端,再次输入:

ls /dev -al

就可以看到如下图所示,这样我们就配置成功了。

三、树莓派安装mini串口调试助手

打开终端,输入:

sudo apt-get install minicom 

等待安装完成。

安装完成之后,接下来就是使用串口助手。在终端输入命令:

minicom -D /dev/ttyAMA0 -b 115200 

回车即可进入。这里 -D /dev/ttyAMA0 就是指向我们打开的串口端口号,和COM1这种是一样的, -b 115200是配置波特率,这一项我们在minicom中输入 Ctrl+A 在下方也是可以看到我们的波特率。

注意:这里我遇到了一个问题,就是提示打开 ttyAMA0 的时候没有权限,如果你也遇见了没有权限打开tty8的这种提示,打开终端输入:

sudo chmod 777 /dev/ttyUSB0

这里的 ttyUSB0 对应你提示没有权限的串口,然后回车就OK解决了。

minicom打开之后如图所示:

我打开minicom串口助手的时候,会发现键盘失灵,就是在minicom下,键盘跟没插似的。如果你没有遇到这种情况,就可以跳过这一小节。那么具体解决办法,参考这个博主的博文,里面有着详细的操作步骤:

https://blog.csdn.net/weixin_41276153/article/details/128037288?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168207712316800186528500%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168207712316800186528500&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-128037288-null-null.142^v86^wechat,239^v2^insert_chatgpt&utm_term=%E6%A0%91%E8%8E%93%E6%B4%BE%E4%B8%8Estm32%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1&spm=1018.2226.3001.4187

好了,到这里所有配置已经结束,接下来就可以验证了。

四、树莓派与电脑串口调试

打开电脑上的串口调试助手,把树莓派的minicom串口调试助手也打开。我用的是ttyAMA0,所以指令是:

minicom -D /dev/ttyAMA0 -b 115200

注意:电脑上的串口助手波特率等信息与树莓派上的信息要对应。

连线方式:

树莓派上的RX引脚   连接   USB-TTL上的TX引脚,

树莓派上的TX引脚   连接   USB-TTL上的RX引脚,

GND   与   GND相连。

USB-TTL插到电脑上之后就可以进行树莓派与电脑之间的串口调试了。

 串口调试助手网上随便找一个就可以,这里给个链接:

链接:https://pan.baidu.com/s/17CVgDrNb6OM6yVvCB5A8HQ?pwd=1mge 
提取码:1mge

五、树莓派与STM32串口调试

连线方式:

树莓派上的RX引脚   连接   STM32上的TX引脚,

树莓派上的TX引脚   连接   STM32上的RX引脚,

GND  与  GND相连(这个GND最好接上,让它们之间有一个统一的低电平,更容易接收到数据)。

我们可以写这么一个程序进行测试:树莓派发送“456”,STM32接收到之后发送“123”回来。

STM32端的程序就不挂了,网上有很多例程。把波特率、校验位、停止位等信息配置对了就可以。下面挂一下树莓派的发送“456”的程序。

import serial

ser = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.1)  # 生成串口

while True:

    ser.write(b'456') # 发送数据

效果如下图: 

最后再留几个树莓派接收数据的程序,这两句要放在while循环里,以达到串口实时接收信息的目的。

ser.flushInput()  # 清空缓存

data = ser.read(1)  # 读取一个字节的数据

当然这只是举一个简单的例子,具体读取多少字节数据,或者其他更多设置,可以网上搜索一下进行修改 。

注意事项:

1.我做的这个项目中,结合到了串口通信与摄像头的实时检测,由于二者都是实时的,所以串口通信的读取间隔不能影响到摄像头视频流的采集。

所以,对于下面这句初始化代码中,timeout的取值十分重要。经过尝试,间隔为0.1s的时候,摄像头读取视频流是不卡顿的,但是有时候串口会接收不到信息。所以,具体情况还是需要你自己去亲自调试。

ser = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.1)

2.另外就是我自己感觉,波特率为9600时的效果要比115200的效果好一点。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable-Diffusion-webui mac m1安装

Stable-Diffusion-webui mac m1安装 推荐下载器:neat download manager 安装git python 3.10 下载地址:https://github.com/AUTOMATIC1111/stable-diffusion-webui 我这边是通过pycharm 通过git直接拉取到本地的,下载的,最好先建…

使用AI轻松搞定UI设计;a16z:快速高效使用LLM构建应用程序;AI时代99%软件都会消失;豆瓣9.3的经典Python入门书 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 Indeed:美国5月份生成式AI职位发布量增长 20% Indeed 是美国就业门户网站,根据其最新发布的数据显示&#xff…

Golang -> Golang 的概述

Golang 的概述 Golang 的语言的特点Golang 的开发工具Golang 的版本 Golang 的语言的特点 简介: Go 语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率 使用一个表达式来形容 Go 语言:Go C Python 说明 Go …

书虫“Bookworm”出山:Debian 版本代号与《玩具总动员》

作为最受欢迎的 Linux 发行版之一,Debian 是许多其他发行版的基础,许多非常受欢迎的 Linux 发行版,例如 Ubuntu、Knoppix、PureOS 、Tails、Armbian 以及 Raspbian,都基于 Debian。 经过近 20 个月的开发,2023 年 6 月…

VMware vCenter Server 8.0U1b 发布下载(重要安全更新)

VMware vCenter Server 8.0U1b 发布下载(重要安全更新) 请访问原文链接:https://sysin.org/blog/vmware-vcenter-8-u1/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org VMware vCenter Serve…

【数据网格架构】数据网格架构模式

企业数据网格正在彻底改变企业管理数据的方式。什么是基础数据网格模式? 数据网格模式 企业数据网格正在成为一种独特且引人注目的方式来管理企业内的数据。它将“产品思维”引入企业数据管理,同时在企业中实现更高水平的敏捷性和数据治理。它创造了一种…

行为型模式--迭代器模式

目录 概述 结构 案例实现 优缺点 优点: 缺点: 使用场景 概述 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate&#xf…

【裸机开发】IRQ 中断服务函数(二)—— 全局中断初始化

实现了 IRQ 中断服务函数的汇编部分以后,接下来我们要使用C代码实现IRQ中断服务函数的具体逻辑,主要包含初始化和中断处理两部分。 全局中断初始化(全局中断使能、IRQ中断使能)具体中断处理逻辑实现 目录 一、全局中断初始化&am…

【C++】第14章: C++中的代码重用

第十四章 C中的代码重用 文章目录 第十四章 C中的代码重用引言14.1 valarray类简介14.1.1 接口和实现14.1.2 C和约束14.1.3 初始化顺序 14.2 has a14.2.1 组合14.2.2 私有继承14.2.2.1 访问基类的方法14.2.2.2 访问基类对象14.2.2.3 访问基类的友元函数 14.2.3 使用组合还是私有…

【软件工程导论】从已考完期末的角度记录软导常考内容

文章目录 软件工程概念软件过程模型(了解)软件生存周期划分数据流图内聚与耦合的种类UML中的主要图及其作用MVC模式MVVM模式黑盒测试白盒测试白盒测试法的逻辑覆盖标准 软件工程概念 什么是软件工程?它的目标和内容是什么? 软件工…

无处不在 | 亚马逊云科技的 Java 生态

Java 自诞生以来就一直是热门的编程语言。得益于丰富的生态以及完善维护的包和框架,Java 拥有着庞大的开发者社区。这个 1995 年诞生的计算机语言,以 “一次编写,到处运行” 的跨平台特性以及面向对象、泛型编程等现代语言的特性迅速成为了企…

企业如何通过精细化管理实现高质量增长?

增量经济时代,各行各业都有比较充足的发展机会,即使采取相似的发展模式、提供同质化的产品和服务,也都会获得收益和增长。当前,我国开始步入存量经济时代,增量空间正逐步被压缩,这将对区域格局、产业组织结…

【NLP】PageRank、TextRank算法的原理解析

一、说明 PageRank是经典的网页热度评分算法,在自然语言的热词提取也有同样的意义(TextRank);本文详细叙述该算法的原理,配合部分代码演示其原理。 二、PageRank算法的启发因素 2.1 算法兴起 PageRank (PR) 是…

HDLBits笔记6:Circuits.Combinational Logic.Multiplexers + Arithmetic Circuits

Multiplexers 2-to-1 multiplexer module top_module( input a, b, sel,output out ); assign out sel ? b : a; endmodule2-to-1 bus multiplexer module top_module( input [99:0] a, b,input sel,output [99:0] out );assign out sel ? b : a; endmodule9-to-1 multi…

逍遥自在学C语言 | 多级指针探秘

前言 多级指针在C语言中是一种特殊的指针类型,它可以指向其他指针的指针。 通过多级指针,我们可以间接地访问或修改存储在内存中的数据。 在本文中,我们将讨论多级指针的概念、使用方法、使用场景以及常见错误及其避免方法。 一、人物简介…

软件项目管理 第六章 软件项目的进度管理 课后习题参考答案——主编:李冰、张桥珍、刘玉娥

第六章 软件项目的进度管理 课后习题参考答案 1.选择题 (1)快速跟进是指(A)。 A.采用并行执行任务,加速项目进展 B.用一个任务取代另外的任务 C.如有可能,减少任务数量 D.减轻项目风险 (2)赶工一个任务时,…

相机畸变概述

上节说到了相机模型,那么这节说说相机的畸变 如果有手机爱好者,听到很多测评进行测评的时候,都会提到一个词,广角防畸变,啥意思,举个栗子 来看下信号塔,是不是已经开始歪了,这就是0.6倍,超广角模式下的畸变(其实一倍也畸变,小声BB) 为啥会畸变呢,仔细看镜头,镜头是曲面的,光…

CDN和DNS

目录 宽带,窄带,带宽区别和联系如何计算带宽带宽和网速的区别和联系 CDNCDN的原理CDN的好处CDN和通信行业DNS和CDN的区别与联系用户访问未使用CDN缓存网站的过程为使用了CDN缓存后的网站的访问过程变为 CDN加速服务 DNSDNS对好处公共 DNS114 DNS阿里DNS百…

Mac安装配置Visual Studio Code(vscode)以及Java环境详细教程(初学者必看)

原本博主今天想继续给大家出Java接下来的教程,但是就在昨天我在配置vscode的时候遇到了一些问题,Windows系统的小伙伴配置起来肯定很方便,但是在Mac的小伙伴却显得十分无奈,所以我想给大家出一篇Mac的Visual Studio Code配置以及Java环境搭建教程! 博客主页:Jovy.的…

C#中调用MATLAB的函数形式的m文件

问题介绍 需要在C#编写的winform中调用matlab写的函数类型的m文件,并在winform中读取m文件的返回值。 之前也写过类似的博客,请参考:C#中调用MATLAB执行MATLAB代码 本篇文章算是之前文章的更新版本吧。 步骤 1 创建C#的winform项目 在桌面…