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这边看到源源不断的信息打印了。

相关新闻

16-Java反射机制:Spring IOC背后的核心技术

16-Java反射机制:Spring IOC背后的核心技术

Java反射机制:Spring IOC背后的核心技术 开篇:为什么框架能自动创建对象? 你有没有想过:Spring里你只写了一个Service注解,Spring就能自动创建对象、注入依赖、调用方法。它是怎么做到的? 答案就是反射。反…

2026/7/17 0:56:33 阅读更多 →
数智化转型深水区破局:智圣新创全局型数据治理与赋能体系全国高校落地指南

数智化转型深水区破局:智圣新创全局型数据治理与赋能体系全国高校落地指南

当前国内绝大多数高校已经走完智慧校园基础建设期,随着教育数字化战略的持续推进,存量系统的效能释放、数据价值的深度挖掘成为新阶段的核心建设目标,智圣新创全局型数据治理与赋能体系正是针对这一行业共性需求打造的落地方案,目…

2026/7/17 0:56:33 阅读更多 →
智能问数DataChat,让管理者直接用大白话查数据

智能问数DataChat,让管理者直接用大白话查数据

每周一早上,很多企业的管理者都在等同一份东西——上周的生产经营数据报表。报表要靠统计员从ERP、MES、品质系统里一个个捞数据,再人工对齐、汇总,往往要到周一下午才能拿到,拿到的还是上周的数据。决策永远滞后于现实。这背后是…

2026/7/17 0:54:32 阅读更多 →

最新新闻

智能车牌识别系统技术解析与执法应用

智能车牌识别系统技术解析与执法应用

1. 项目背景:智能车牌识别技术的执法革新最近在多个城市的交通执法现场,一种被称为"扫牌"的智能识别设备引发广泛关注。这套系统能在3秒内完成车牌识别、车辆信息核验和违章行为判定,将传统人工查车效率提升近百倍。作为参与过多个…

2026/7/17 1:38:46 阅读更多 →
用友U8+数据库连接失败排查与解决方案

用友U8+数据库连接失败排查与解决方案

1. 问题现象与初步诊断当用友U8客户端出现"连接数据库服务器失败及不知道这样的主机"错误时,通常表现为以下几种具体形态:客户端登录时弹出错误对话框,显示完整错误信息系统日志中记录连接超时或主机不可达事件应用服务器监控显示数…

2026/7/17 1:36:45 阅读更多 →
Windows 10 22H2更新失败解决方案与优化指南

Windows 10 22H2更新失败解决方案与优化指南

1. Windows 10 22H2更新失败的典型症状与初步诊断每次微软发布重大版本更新,总有一批用户会遇到各种升级障碍。最近在技术社区和IT服务台,关于Windows 10 22H2版本更新失败的咨询量明显上升。典型症状包括:点击"检查更新"后长时间无…

2026/7/17 1:36:45 阅读更多 →
订货小程序哪个好?一个农产品基地老板的升级之路

订货小程序哪个好?一个农产品基地老板的升级之路

据行业研究机构2025年发布的商贸数字化服务市场分析报告,国内企业级SaaS订货工具市场规模已突破80亿元,年均复合增速超过12%。但另一面,调研同样显示**超过65%**的批发企业仍以电话、微信和手工表格接单——订单错漏、价格混乱、库存滞后、财…

2026/7/17 1:30:44 阅读更多 →
【2027最新】基于SpringBoot+Vue的乐乐农产品销售系统管理系统源码+MyBatis+MySQL

【2027最新】基于SpringBoot+Vue的乐乐农产品销售系统管理系统源码+MyBatis+MySQL

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。博主介绍:&#x…

2026/7/17 1:28:43 阅读更多 →
Illustrator脚本终极指南:10个高效工具让你的设计效率提升300%

Illustrator脚本终极指南:10个高效工具让你的设计效率提升300%

Illustrator脚本终极指南:10个高效工具让你的设计效率提升300% 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中的重复性操作而烦恼吗&#xf…

2026/7/17 1:26:42 阅读更多 →

日新闻

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

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

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

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

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

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

2026/7/17 0:02:10 阅读更多 →
2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

现在很多用户都需要一款能适配多场景的键盘,既能满足交流码字的需求,又能应对居家电竞的性能需求,最好还得有点小颜值。而大多键盘都只能兼顾其中一两个场景。这次我实测了IQUNIX EV63三款配色(银武士、黑武士、紫罗兰&#xff09…

2026/7/17 0:04:10 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/15 21:09:01 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/15 19:42:20 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/16 23:40:37 阅读更多 →

月新闻