发布时间:2026/7/17 1:02:36
esp32开发与应用(和stm32f103用spi通信)
【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】现在esp32和mcu一起出现的场合很多前者适合网络传输和屏幕显示后者则多出现在工业场景。所以两者一起出现就可以发挥各自的优势。但是两个一起合作也有通信的需求。虽然用ttl可以解决通信的问题但是速率比较低不太方便我们一般还是用spi会感觉比较简单一点。1、mcu做spi hostesp32做spi slave之所以会这样是因为很多时候都是采集数据的要求这个时候用mcu做master方便一点。2、gnd务必对接不管是测试的时候还是部署的时候两个模块的gnd需要互联。3、pin连接目前esp32的pin是5/18/19/23而mcu这边的pin是pa4/pa5/pa6/pa7。两者的连接方式是这样的5连接pa418连接pa519连接pa623连接pa7。4、esp32需要主动发起通信怎么办一般是通过gpio让mcu触发一个中断。5、代码部分这部分代码可以让ai写也可以。首先写mcu的代码#include stm32f10x.h #define SPI_CS_LOW() GPIO_ResetBits(GPIOA, GPIO_Pin_4) #define SPI_CS_HIGH() GPIO_SetBits(GPIOA, GPIO_Pin_4) void SPI1_Master_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE); // SCK(PA5), MOSI(PA7) 复用推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // MISO(PA6) 浮空输入 GPIO_InitStructure.GPIO_Pin GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); // NSS(PA4) 用普通GPIO推挽输出软件控制片选 GPIO_InitStructure.GPIO_Pin GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); SPI_CS_HIGH(); // 默认不选中 SPI_InitStructure.SPI_Direction SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode SPI_Mode_Master; SPI_InitStructure.SPI_DataSize SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS SPI_NSS_Soft; // 软件NSS用GPIO4手动拉 SPI_InitStructure.SPI_BaudRatePrescaler SPI_BaudRatePrescaler_64; // 72MHz/641.125MHz先低速验证 SPI_InitStructure.SPI_FirstBit SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial 7; SPI_Init(SPI1, SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); } uint8_t SPI1_TransferByte(uint8_t data) { while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) RESET); SPI_I2S_SendData(SPI1, data); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) RESET); return SPI_I2S_ReceiveData(SPI1); } // 简单延时根据你的系统时钟自行调整或换成systick延时 void delay_us(uint32_t us) { for (uint32_t i 0; i us * 8; i) __NOP(); } void SPI1_TransferBuffer(uint8_t *tx, uint8_t *rx, uint16_t len) { SPI_CS_LOW(); delay_us(10); // 给ESP32 slave一点反应时间非常关键 for (uint16_t i 0; i len; i) { rx[i] SPI1_TransferByte(tx[i]); } SPI_CS_HIGH(); } int main(void) { SPI1_Master_Init(); uint8_t tx_buf[4] {0x11, 0x22, 0x33, 0x44}; uint8_t rx_buf[4] {0}; while (1) { SPI1_TransferBuffer(tx_buf, rx_buf, 4); // rx_buf 里是 ESP32 回传的数据 for (volatile int i 0; i 500000; i); // 简单延时 } }然后是esp32的代码#include driver/spi_slave.h #include esp_log.h #include freertos/FreeRTOS.h #include freertos/task.h #include string.h #define GPIO_MOSI 23 #define GPIO_MISO 19 #define GPIO_SCLK 18 #define GPIO_CS 5 static const char *TAG SPI_SLAVE; void app_main(void) { esp_err_t ret; spi_bus_config_t buscfg { .mosi_io_num GPIO_MOSI, .miso_io_num GPIO_MISO, .sclk_io_num GPIO_SCLK, .quadwp_io_num -1, .quadhd_io_num -1, }; spi_slave_interface_config_t slvcfg { .mode 0, // 对应CPOL0, CPHA0要和STM32一致 .spics_io_num GPIO_CS, .queue_size 3, .flags 0, }; // 初始化SPI从机用DMA ret spi_slave_initialize(SPI2_HOST, buscfg, slvcfg, SPI_DMA_CH_AUTO); ESP_ERROR_CHECK(ret); WORD_ALIGNED_ATTR uint8_t recvbuf[4] {0}; WORD_ALIGNED_ATTR uint8_t sendbuf[4] {0xA1, 0xA2, 0xA3, 0xA4}; // 要回传给STM32的数据 while (1) { spi_slave_transaction_t t {0}; t.length 4 * 8; // 单位bit t.tx_buffer sendbuf; t.rx_buffer recvbuf; // 阻塞等待STM32发起一次传输 ret spi_slave_transmit(SPI2_HOST, t, portMAX_DELAY); if (ret ESP_OK) { ESP_LOGI(TAG, recv: %02X %02X %02X %02X, recvbuf[0], recvbuf[1], recvbuf[2], recvbuf[3]); // 根据收到的数据更新下一次要回传的内容 sendbuf[0]; // 举例简单自增实际按你的协议处理 } } }6、测试测试的时候一般先把esp32准备插好之后再接入mcu。这个时候不出意外就可以在esp32这边看到源源不断的信息打印了。

相关新闻

鸿蒙APP如何复用已有小程序资产,将微信小程序运行在原生鸿蒙系统
2026/7/17 1:02:36

鸿蒙APP如何复用已有小程序资产,将微信小程序运行在原生鸿蒙系统

很多企业启动鸿蒙APP建设时,难点并不只在ArkTS工程本身。已有Android、iOS和微信小程序已经承载了大量业务,服务入口、活动页、商城、设备控制、会员权益、售后工单都跑了多年。如果鸿蒙端全部重新开发一遍,页面、接口、测试用例、运营后台和…

阅读更多
JetBrains IDE评估重置机制技术实现深度解析
2026/7/17 1:02:36

JetBrains IDE评估重置机制技术实现深度解析

JetBrains IDE评估重置机制技术实现深度解析 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 核心架构设计与实现原理 ide-eval-resetter是一个针对JetBrains系列IDE的评估信息重置工具,通过系统化的文…

阅读更多
深圳商标设计师进阶指南:基于用户心智模型的LOGO视觉锤打造全流程
2026/7/17 1:02:36

深圳商标设计师进阶指南:基于用户心智模型的LOGO视觉锤打造全流程

深圳商标设计师进阶指南:基于用户心智模型的LOGO视觉锤打造全流程在深圳这座“设计之都”,商标设计早已不是画个Logo那么简单。当极简成为标配、当视觉同质化加剧,真正拉开品牌差距的,是设计师能否用一枚商标精准“钉”入用户心智…

阅读更多
Windows 11虚拟机安装与优化全攻略
2026/7/17 2:02:36

Windows 11虚拟机安装与优化全攻略

1. Windows 11虚拟机体验全景指南 在实体机上安装新系统总让人顾虑重重——驱动兼容性、系统稳定性、数据安全性都是不得不考虑的问题。而虚拟机技术恰好为我们提供了完美的沙箱环境,让系统体验变得轻松无负担。最近微软发布了Windows 11 23H2更新,虚拟机…

阅读更多
C++名称空间深度解析:从命名冲突解决到大型项目工程实践
2026/7/17 2:02:36

C++名称空间深度解析:从命名冲突解决到大型项目工程实践

1. 项目概述:为什么我们需要名称空间?在C的世界里,命名冲突是一个让无数开发者头疼不已的“经典”问题。想象一下,你正在开发一个大型的图形处理库,里面定义了一个非常通用的Matrix类。与此同时,你的项目又…

阅读更多
Linux文件删除安全指南与防护方案
2026/7/17 2:02:36

Linux文件删除安全指南与防护方案

1. 为什么我们需要认真对待Linux文件删除在Windows系统中删除文件时,文件会先进入回收站,这给了我们反悔的机会。但Linux的rm命令设计哲学完全不同——它默认采用"一次删除,永久消失"的工作方式。这种差异源于Linux作为服务器操作系…

阅读更多
Windows Server 2022部署前后端分离项目实战指南
2026/7/17 2:02:36

Windows Server 2022部署前后端分离项目实战指南

1. Windows Server 2022 部署前后端项目概述最近接手了一个企业级应用系统的部署任务,客户要求将前后端分离项目部署到Windows Server 2022环境中。这种部署场景在企业内部系统中非常常见,特别是那些长期依赖Windows生态的客户。与Linux部署相比&#xf…

阅读更多
Windows 11虚拟机C盘扩容全攻略
2026/7/17 2:02:36

Windows 11虚拟机C盘扩容全攻略

1. 为什么需要给Windows 11虚拟机扩容?在VMware Workstation中运行Windows 11虚拟机时,经常会遇到C盘空间不足的困扰。这个问题通常源于以下几个典型场景:初始分配空间不足:很多用户在创建虚拟机时,习惯性采用默认的60…

阅读更多
esp32开发与应用(和stm32f103用spi通信)
2026/7/17 1:02:36

esp32开发与应用(和stm32f103用spi通信)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 现在esp32和mcu一起出现的场合很多,前者适合网络传输和屏幕显示,后者则多出现在工业场景。所以两者一起出现就可以发挥各自…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/16 21:32:43

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/16 15:03:34

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/16 22:47:50

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制
2026/7/17 0:02:36

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

阅读更多
HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式

Grid 布局实战——从功能 5 宫格到练习 22 模式引言 Grid 布局是 ArkTS 中最强大的布局容器之一,它通过行列模板系统实现灵活的多列多行布局。在本英语学习 App 中,Grid 布局贯穿了首页的多个核心模块:功能栏 5 宫格、练习模式 22 卡片、以及…

阅读更多
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/13 21:11:56

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/14 16:39:14

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/14 16:39:14

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多