当前位置: 首页 > news >正文

基于树莓派4B与STM32的UART串口通信实验(代码开源)

在现代嵌入式系统中,树莓派和STM32的结合使用已成为一种流行趋势,它们各自承担不同的角色,实现优势互补。树莓派以其强大的计算能力处理复杂算法,而STM32则以其高效的控制能力执行实际的硬件操作。本文将详细介绍如何实现基于树莓派4B和STM32的UART串口通信,并展示如何通过串口发送数据以及在STM32上接收和处理这些数据。

一、系统概述

本项目的核心是实现树莓派4B与STM32之间的UART通信。树莓派4B将作为上位机,负责运行复杂的图像处理算法,如基于YOLOv5-Lite的目标检测,并将检测结果发送至STM32。STM32作为下位机,负责解析接收到的数据,并根据这些数据执行相应的控制任务。

二、硬件连接

首先,需要将树莓派4B和STM32通过UART接口连接。树莓派4B的GPIO14(TXD)连接到STM32的PA9(TX),GPIO15(RXD)连接到STM32的PA10(RX)。确保正确连接后,可以开始软件配置。

三、树莓派4B配置

3.1 安装Serial

在树莓派4B上,首先需要安装Python的pyserial库,用于串口通信。

pip install pyserial
3.2 配置UART

树莓派4B的UART配置可以通过修改/boot/config.txt文件来实现。

sudo nano /boot/config.txt

在文件末尾添加以下行以启用UART。

enable-uart=1
3.3 编写Python发送代码

编写Python脚本,用于周期性地发送数据到STM32。

import serial
import timeser = serial.Serial('/dev/ttyAMA0', 115200, timeout=1)while True:# 假设发送的数据是当前时间的秒数current_time = str(int(time.time()))ser.write(current_time.encode())time.sleep(1)

四、STM32配置

4.1 CubeMX配置

使用STM32CubeMX配置串口参数,设置波特率与树莓派4B相匹配(115200),并启用中断。

4.2 编写STM32代码

在STM32上,编写代码以初始化串口并处理接收到的数据。

#include "stm32f1xx_hal.h"
#include <stdio.h>UART_HandleTypeDef huart1;// 用于接收数据的缓冲区
uint8_t rxBuffer[100];void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);int main(void) {HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();// 循环处理接收到的数据while (1) {// 检查是否有数据接收完毕if (HAL_UART_Receive_IT(&huart1, rxBuffer, sizeof(rxBuffer)) == HAL_OK) {// 处理接收到的数据for (int i = 0; i < sizeof(rxBuffer); i++) {printf("%c", rxBuffer[i]);}}}
}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {if (huart->Instance == USART1) {// 数据接收完毕,处理数据printf("Data received: ");for (int i = 0; i < huart->RxXferSize; i++) {printf("%c", rxBuffer[i]);}printf("\n");// 重新启动接收中断HAL_UART_Receive_IT(&huart1, rxBuffer, sizeof(rxBuffer));}
}// ...省略其他函数实现...

五、高级应用

在实际应用中,可以将树莓派4B的目标检测结果发送给STM32,例如,发送检测到的物体中心坐标,STM32根据这些坐标执行相应的控制逻辑。

六、总结

本文详细介绍了基于树莓派4B和STM32的UART串口通信实验。通过树莓派4B发送数据,STM32接收并处理这些数据,展示了两者如何协同工作。这种架构在智能硬件领域非常常见,适用于多种应用场景,如智能小车、无人机等。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

相关文章:

基于树莓派4B与STM32的UART串口通信实验(代码开源)

在现代嵌入式系统中&#xff0c;树莓派和STM32的结合使用已成为一种流行趋势&#xff0c;它们各自承担不同的角色&#xff0c;实现优势互补。树莓派以其强大的计算能力处理复杂算法&#xff0c;而STM32则以其高效的控制能力执行实际的硬件操作。本文将详细介绍如何实现基于树莓…...

【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

IIC协议

一、IIC协议 1.1 IIC协议概述 IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS(飞利浦)公司在80年代开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。IIC属于半双工同步通信方式 特点 简单性和有效性。 由于接口直接在组件之上&#xff0c;…...

如何在linux系统上部署nginx

1&#xff09;首先去 nginx.org/download 官网下载你所需要的版本 我这里是下载的 nginx-1-23-3.tar.gz 2&#xff09;然后执行 yum -y install lrzsz 安装文件上传软件 执行 rz 选择你下载nginx的位置进行上传 yum -y install lrzsz 3&#xff09;执行 tar -zxvf nginx-1.23…...

香港网站服务器抵御恶意攻击的一些措施

香港网站服务器因为在互联网中扮演着重要的角色&#xff0c;因此也在面临着网络中各种恶意攻击的威胁&#xff0c;为了确保香港网站服务器的安全和稳定运行&#xff0c;可以通过安全措施来进行防御&#xff0c;本文就来分享一些香港网站服务器来抵御恶意攻击的关键措施。 一、网…...

实战:docker部署filesite.io完美解决家庭相册需求-2024.8.10(测试成功)

https://wiki.onedayxyy.cn/docs/filesite.io-photot-install-full...

美团到店面经

redis中大key引起的问题 1、阻塞请求 Big Key对应的value较大&#xff0c;我们对其进行读写的时候&#xff0c;需要耗费较长的时间&#xff0c;这样就可能阻塞后续的请求处理。Redis的核心线程是单线程&#xff0c;单线程中请求任务的处理是串行的&#xff0c;前面的任务完不成…...

【CSS入门】第五课 - font字体

这一节&#xff0c;我们说一说font这个字体。做网页开发&#xff0c;网页中几乎不可能没有文字的&#xff0c;为了使网页更漂亮&#xff0c;用户体验更好。人们可算是绞尽脑汁&#xff0c;其中一部分就是在字体上下的大功夫。 接下来&#xff0c;我们学习一下&#xff0c;font…...

STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led-寄存器编程

1、门电路 门电路组成简单加法器&#xff1a; 二进制对电路的影响&#xff1a; 0和1代表无和有&#xff1b; 以下图例&#xff0c;演示与门&#xff1a;左1右1输出1&#xff1b; 电平标准&#xff1a;使用不同的电压表示数字0和1&#xff1b; 高电平&#xff1a;1&#xff1…...

【动态规划算法题记录】343. 整数拆分 | 96.不同的二叉搜索树

整数拆分 题目&#x1f517; 题目描述 给定一个正整数 n &#xff0c;将其拆分为 k个正整数的和&#xff08;k > 2&#xff09;&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积 。 思路分析 dp数组含义&#xff1a;dp[i]表示整数i拆分后的最大乘积。…...

网页上预览Excel文件

如何运行: 需要发布在服务器 如Tomcat 实例图片: 需要展示的文件: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>excel预览</title><link rel"stylesheet" href"…...

Unity射击游戏开发教程:(31)制造一定追踪行为的敌人

在本文中,我们将介绍如何在两种敌人行为之间切换。本文是前两篇文章的延续,分别介绍了敌人躲避玩家射击以及敌人不断旋转并向玩家射击的情况。我只是介绍如何在这两种行为之间进行转换。 这种新的敌人行为的目标: 当不开火时,敌人可以躲避玩家的射击。射击时,敌人无法躲避…...

springboot mybatis plus 固定查询条件及可选查询条件的组合查询,使用QueryWrapper.and()来解决。

1、我们在写查询SQL的时候&#xff0c;经常会碰到&#xff0c;比如&#xff0c;同一个类别下的某一个编号的物料信息&#xff0c;或者是同一批次的物料库存问题等等。 所属类别fid物料编号bm物料批次pc110.01.0220240807110.01.0320240807 210.02.0120240805 2、那么我…...

使用ollama取代openai的api进行graphRAG失败记录

pip install ollama pip install langchain_ollama graph_documents llm_transformer.convert_to_graph_documents(split_documents) print(graph_documents) 偶尔会成功&#xff0c;但是大部分是失败的&#xff1a; 报错记录如下&#xff0c;暂时没想到好的办法&#xff…...

MyBatis 配置与测试方式

目录 一&#xff0c;什么是MyBatis 二&#xff0c;准备工作 创建项目 配置数据库连接 持久层代码 单元测试 一&#xff0c;什么是MyBatis 简单来说&#xff0c;MyBatis 是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发&#xff0c;能更简单完成程序与数据库之间…...

C#实现代理服务器

在C#中实现一个简单的代理服务器&#xff0c;可以使用System.Net.Sockets命名空间下的TcpListener类来监听客户端的连接请求&#xff0c;并使用TcpClient来处理与客户端的通信。以下是一个简单的代理服务器示例&#xff1a; using System; using System.IO; using System.Net;…...

react的路由实战使用

环境配置&#xff1a;vitetsreact18 1、安装包 npm i react-router-dom 2、 根路由配置以及路由挂载 a、在src下面创建router文件夹配置简单的路由信息&#xff1a; router/index.tsx import { createBrowserRouter } from "react-router-dom"; import UserLogin…...

python 字典转成类 构建类

目录 python 字典转成类 复杂嵌套示例: 动态实例化类 太好用了! python 字典转成类 class DictToClass:def __init__(self, dictionary):for key, value in dictionary.items():if isinstance(value, dict):# 如果值是字典,递归转换为类的实例setattr(self, key, DictToC…...

springboot 过滤器

1、过滤器的实现 springboot中过滤器通过实现接口Filter并重写init、doFilter、destroy三个方法。在三个方法中加入自己的业务逻辑处理。 【注意】Filter接口的完整包名在不同的jdk版中中的变化。这里示例中使用的版本为 open-jdk17。完整名称 jakarta.servlet.Filter。如果使…...

【C语言篇】深入理解指针1

文章目录 内存和地址内存编址 指针变量和地址取地址操作符指针变量和解引用操作符指针变量指针变量类型解引用操作符指针变量的大小 指针变量类型的意义指针的解引用指针-整数void*指针 const修饰指针指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因如何规避野指针…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...