STM32 与树莓派(Raspberry Pi)的通信常见方案及实现步骤:


1. UART 串口通信(最简单)

适用场景:短距离、低速数据交换(如传感器数据、调试信息)。
硬件连接

STM32引脚树莓派引脚备注
TXRX (GPIO15)交叉连接
RXTX (GPIO14)交叉连接
GNDGND共地

软件配置

  • STM32 端(使用HAL库):

    UART_HandleTypeDef huart1;
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200;
    huart1.Init.WordLength = UART_WORDLENGTH_8B;
    huart1.Init.StopBits = UART_STOPBITS_1;
    HAL_UART_Init(&huart1);// 发送数据
    uint8_t data[] = "Hello Raspberry Pi!";
    HAL_UART_Transmit(&huart1, data, sizeof(data), HAL_MAX_DELAY);
  • 树莓派端(Python):

    import serial
    ser = serial.Serial('/dev/ttyS0', 115200, timeout=1)  # 使用硬件串口(GPIO14/15)
    while True:if ser.in_waiting > 0:received = ser.readline().decode('utf-8').strip()print(f"Received: {received}")

注意事项

  • 禁用树莓派串口控制台(通过 raspi-config → Interface Options → Serial → 关闭登录shell)。

  • 电平匹配:STM32是3.3V,树莓派GPIO也是3.3V,可直接连接;若为5V设备需电平转换。


2. I2C 通信(多设备共享总线)

适用场景:中低速、多设备(如多个传感器)。

注意事项

  • 确保STM32和树莓派的I2C地址不冲突。

  • 使用 i2cdetect -y 1 检测设备地址。

硬件连接

STM32引脚树莓派引脚备注
SCLSCL (GPIO3)接4.7kΩ上拉电阻到3.3V
SDASDA (GPIO2)接4.7kΩ上拉电阻到3.3V
GNDGND共地

软件配置

  • STM32 端(作为从设备):

    #include "stm32f1xx_hal_i2c.h"I2C_HandleTypeDef hi2c1;
    hi2c1.Instance = I2C1;
    hi2c1.Init.ClockSpeed = 100000;  // 100kHz
    HAL_I2C_Init(&hi2c1);uint8_t buffer[10];
    HAL_I2C_Slave_Receive(&hi2c1, buffer, sizeof(buffer), HAL_MAX_DELAY);
  • 树莓派端(Python,主设备):

    import smbus
    bus = smbus.SMBus(1)  # 树莓派默认I2C总线
    address = 0x08        # STM32的I2C从地址
    bus.write_byte(address, 0x55)  # 发送数据


3. SPI 通信(高速数据传输)

适用场景:高速、全双工(如摄像头、显示屏数据)。

注意事项

  • 树莓派SPI需启用(raspi-config → Interface Options → SPI)。

  • 电平匹配:确保3.3V兼容。

硬件连接

STM32引脚树莓派引脚备注
SCKSCLK (GPIO11)时钟线
MOSIMOSI (GPIO10)主发从收
MISOMISO (GPIO9)主收从发
CSCE0 (GPIO8)片选信号
GNDGND共地

软件配置

  • STM32 端(SPI从模式):

    SPI_HandleTypeDef hspi1;
    hspi1.Instance = SPI1;
    hspi1.Init.Mode = SPI_MODE_SLAVE;
    HAL_SPI_Init(&hspi1);uint8_t tx_data = 0xAA, rx_data;
    HAL_SPI_TransmitReceive(&hspi1, &tx_data, &rx_data, 1, HAL_MAX_DELAY);

  • 树莓派端(Python,主模式):

    import spidev
    spi = spidev.SpiDev()
    spi.open(0, 0)  # 总线0,设备0(CE0)
    spi.max_speed_hz = 1000000  # 1MHz
    resp = spi.xfer2([0x55])    # 发送并接收数据


4. USB CDC(虚拟串口)

适用场景:即插即用、免驱动(如调试日志传输)。
硬件连接:STM32的USB接口 ↔ 树莓派USB端口。

软件配置

  • STM32 端(使用CubeMX配置USB CDC):

    1. 在CubeMX中启用USB Device模式,选择CDC类。

    2. 生成代码后,通过 CDC_Transmit_FS() 发送数据。

  • 树莓派端(自动识别为 /dev/ttyACM0):

    import serial
    ser = serial.Serial('/dev/ttyACM0', 115200)
    ser.write(b"Hello STM32!")

注意事项

  1. 电平兼容:STM32和树莓派GPIO均为3.3V,直接连接时避免5V设备。

  2. 共地:所有通信方式必须共地(GND连接)。

  3. 协议一致性:双方波特率、地址、数据格式需匹配。

通信方式速率距离复杂度适用场景
UART低(≤1Mbps)简单调试、传感器数据
I2C中(≤400kHz)中等多从设备控制
SPI高(≥10Mbps)高速数据传输(如屏幕)
USB中等即插即用通信

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 数据持久化到Mysql

大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解数据持久化到Mysql 视频在线地址&#xff…

【Java EE】多线程-初阶-Thread 类及常见方法

多线程-初阶2. Thread 类及常⻅⽅法2.1 Thread 的常⻅构造⽅法2.2 Thread 的⼏个常⻅属性2.3 启动⼀个线程 - start()2.4 中断⼀个线程2.5 等待⼀个线程 - join()2.6 获取当前线程引⽤2.7 休眠当前线程本节⽬标• 认识多线程• 掌握多线程程序的编写• 掌握多线程的状态• 掌握…

LVS技术知识详解(知识点+相关实验部署)

目录 1.1 LVS简介 1.2 LVS体系结构 1.3 LVS相关术语 1.4 LVS工作模式 1.5 LVS工作原理 1.6 LVS调度算法 2.LVS相关实验部署 2.1 lvs软件相关信息 2.1.1 ipsadm常见参数 2.1.2 试例 2.2 LVS部署NAT模式 2.2.1 实验环境 2.2.2 实验步骤 2.2.2.1 实验基础环境 2.2.…

芋道导入逻辑

一、代码 PostMapping("/import")Operation(summary "导入用户")Parameters({Parameter(name "file", description "Excel 文件", required true),Parameter(name "updateSupport", description "是否支持更新&a…

gradle7.6.1+springboot3.2.4创建微服务工程

目录 一、创建主工程cloud-demo并删除src目录 二、创建子工程user-service/order-service 三、更改父工程build.gradle文件 四、子工程使用mybatis框架 五、子工程使用mybatis-plus框架 六、相关数据库创建 七、最终目录结构 一、创建主工程cloud-demo并删除src目录 二、…

电脑windows系统深度维护指南

🖥️ 电脑系统全方位维护指南 预防故障 提升性能 延长寿命 🔍 引言:为什么需要系统维护? 电脑如同汽车,定期保养可避免: ✅ 突发蓝屏死机 ✅ 系统卡顿崩溃 ✅ 硬件过早损坏 ✅ 数据丢失风险 本指南提供…

字节内部流传的数据分析手册

之前2领导整理内部分享的,所以很多内部业务的分析,比如工作中怎么落地、怎么推进。(数据都是脱敏的哈) **里面的内容都偏应用,比如产品迭代怎么做数据评估、用户增长靠什么指标拆解、AB实验怎么设计、运营活动怎么闭环。**数据分析都是很实际…

Nginx Proxy Manager + LB + Openappsec + Web UI 构建下一代WAF

Nginx Proxy Manager + LB + Openappsec + Web UI部署 一、环境介绍 二、系统参数优化 三、安装docker 四、创建docker网络 五、创建测试容器 六、部署NPM和openappsec 1、下载docker-compose文件 2、拉取相关镜像 3、web UI 获取token 4、修改compose文件并安装 七、登陆NPM配…

【React】npm install报错npm : 无法加载文件 D:\APP\nodejs\npm.ps1,因为在此系统上禁止运行脚本。

使用vsCode打开react项目安装依赖时报错,把terminal打开的powershell改成command prompt即可

深入解析C#装箱转换:值类型如何“变身”为引用类型?

当你将 int i 赋值给 object oi 时, 看似简单的操作背后,藏着一场精密的类型转换革命!🔑 一、核心概念:什么是装箱? 装箱(Boxing) 是C#中的一种隐式转换机制,它将值类型&…

java list 与set 集合的迭代器在进行元素操作时出现数据混乱问题及原因

为什么 List 和 Set 迭代器删除结果不同?1. List 和 Set 的本质差异List(如 ArrayList):有序集合,元素按插入顺序存储,允许重复元素。迭代器遍历时,元素按索引顺序返回。删除操作(通…

大语言模型:人像摄影的“达芬奇转世”?——从算法解析到光影重塑的智能摄影革命

导言在摄影术诞生之初,达芬奇或许无法想象,他对于光影、比例和解剖的严谨研究,会在数百年后以另一种形式重生。今天,当摄影师面对复杂的光线环境或苦苦寻找最佳构图时,一位由代码构筑的“光影军师”正悄然降临——大语…

Java——MyBatis从入门到精通:一站式学习指南

MyBatis从入门到精通:一站式学习指南 作为一款优秀的半自动ORM框架,MyBatis以其灵活的SQL控制和简洁的配置方式,成为Java后端开发中持久层框架的首选。本文将从基础概念到高级特性,全面讲解MyBatis的使用方法,包含实用…

面试150 添加与搜索单词--数据结构设计

思路 通过哈希法去实现,这里主要描述search的思路:如果’.‘不在word中,我们只需要去查询word在不在set中。如果’.‘存在,我们对哈希中的字符串进行遍历w,如果当前字符串的长度不等于word跳过,对word进行遍历&#xf…

学习打卡网站(搭子版本)

概述 之前用了网上的一些学习打卡类app,基本都是收费的,而且有些自己想要的功能却没有,甚至还有广告,正好暑假是个需要容易懒惰的时间,所以干脆自己做了一个能和学习搭子一起记录计划的小网站。 昨天早上开始写&#x…

分享如何在Window系统的云服务器上部署网站及域名解析+SSL

最近看到阿里云的服务器有个199的活动,买了个2核4G带宽5M的服务器,用于小网站的运营也足够,于是就买一个,并且我还挑了个新加坡的站点,本想着运营独立站,用新加坡的站点外网访问会更友好一点。于是问题就来…

FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡

FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡我们蜻蜓hr系统采用的后端框架就是fastadmin,因此我们平稳迁移以此为例,为什么要迁移一份是因为有甲方需要。迁移FastAdmin系统到新服务器需要确保数据完整性和系统功能正常。以下是…

Request和Response相关介绍

Request 和 Response 是什么? Request(请求对象):用来接收浏览器发过来的数据。 Response(响应对象):用来把服务器处理后的结果返回给浏览器。 1. request 的作用(获取请求数据&am…

Springboot 实现热部署

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署&#xff0c;提高开发者的开发效率&#xff0c;无需手动重启Spring Boot应用。引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>s…

虚拟机扩展磁盘容量后扩展分区大小

1. 首先检查磁盘剩余空间sudo fdisk -l /dev/sda2. 如果有未分配空间&#xff0c;直接扩展分区sudo fdisk /dev/sda在fdisk交互界面中&#xff0c;依次写入d # 删除分区 3 # 例如选择分区3&#xff08;/dev/sda3&#xff09; n # 新建分区 p # 主分区 3 # 分区号3 # 起始扇…