You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在搭载ESP32(pico-v3-02)的pico-mini-02上使用SPI自定义引脚

错误根因分析

你的报错属于非法内存访问,从栈回溯可以定位到是__pinMode函数执行时访问了非法地址,触发原因有两个:

  1. 你使用的arduino-esp32 1.0.5版本过老,对ESP32-Pico-V3-02这类紧凑型芯片的引脚映射适配不完善,SPI初始化时对无效引脚的校验逻辑缺失,直接调用引脚配置函数触发崩溃
  2. 你代码中使用的默认/自定义引脚和ESP32-Pico-V3-02的板载资源冲突:GPIO6~11全部接了板载SPI Flash不能挪用,GPIO12是MTDI strapping引脚,上电时拉高会导致Flash供电电压异常,GPIO0、GPIO2是启动strapping引脚,随意用作SPI功能会导致启动异常

解决方案

  • 先升级Arduino IDE中的arduino-esp32包到2.0.10及以上版本,旧版本的SPI驱动存在已知的初始化漏洞,升级后可以规避大部分非法访问问题
  • 替换SPI引脚配置,避开冲突引脚,参考可用引脚定义如下:
// 开启自定义引脚模式
#define ALTERNATE_PINS
// VSPI 可用自定义引脚(均为非strapping、非Flash占用引脚)
#define VSPI_MISO   34
#define VSPI_MOSI   35
#define VSPI_SCLK   32
#define VSPI_SS     33
// HSPI 可用自定义引脚
#define HSPI_MISO   26
#define HSPI_MOSI   27
#define HSPI_SCLK   25
#define HSPI_SS     14
  • 修改SPIClass实例的创建方式,老版本对动态创建SPIClass的支持有bug,直接创建全局静态实例即可:
// 替换原来的指针定义
SPIClass vspi(VSPI);
SPIClass hspi(HSPI);
// 后续调用把->改成.,例如:
// vspi.begin(VSPI_SCLK, VSPI_MISO, VSPI_MOSI, VSPI_SS);
  • 如果你不需要SPI的MISO功能,可以在调用begin时给MISO参数传-1,跳过该引脚的初始化,进一步降低引脚冲突概率

验证方法

修改完成后编译上传,串口不会再打印Guru Meditation报错,用逻辑分析仪接对应SPI引脚可以看到正常的时钟和数据输出。

内容的提问来源于stack exchange,提问作者listout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:21:00