17、ESP32 SPI

SPI 概述

         SPI(Serial Peripheral Interface)协议,即串行外围设备接口,采用一主多从的全双工通信总线。被广泛使用在要求通讯速率较高的场合。

        SPI 通信需要四条信号线:

  • MISO: 主器件数据输入,从器件数据输出。
  • MOSI:主器件数据输出,从器件数据输入。
  • SCK: 时钟信号,由主设备控制发出。
  • NSS(CS): 从设备选择信号,由主设备控制,当NSS为低电平则选中从器件。

        三线 SPI 通信没有 “MIOS”,或 “MISO” 与 “MOSI” 共线。


ESP32 SPI

         ESP32 共有 4 个 SPI,但是用户能够使用的只有 2 个,分为 VSPI 和 HSPI,注意这两个 SPI 默认的引脚中都有作为 Strapping 管脚的引脚,上电瞬间 Strapping 管脚电平不对,就没法正常启动。

 使用注意:

 官方例程更改 SPI 引脚:

#include <Arduino.h>
#include <SPI.h>// #define ALTERNATE_PINS#ifdef ALTERNATE_PINS   // 使用默认引脚#define VSPI_MISO   2#define VSPI_MOSI   4#define VSPI_SCLK   0#define VSPI_SS     33#define HSPI_MISO   26#define HSPI_MOSI   27#define HSPI_SCLK   25#define HSPI_SS     32
#else   // 自定义引脚#define VSPI_MISO   MISO#define VSPI_MOSI   MOSI#define VSPI_SCLK   SCK#define VSPI_SS     SS#define HSPI_MISO   12#define HSPI_MOSI   13#define HSPI_SCLK   14#define HSPI_SS     15
#endif#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
#define VSPI FSPI
#endifstatic const int spiClk = 1000000;  // 1 MHz// SPI 对象指针
SPIClass * vspi = NULL;
SPIClass * hspi = NULL;void setup()
{// SPI 实例vspi = new SPIClass(VSPI);hspi = new SPIClass(HSPI);#ifndef ALTERNATE_PINS// 使用默认的引脚 SCLK = 18, MISO = 19, MOSI = 23, SS = 5vspi->begin();
#elsevspi->begin(VSPI_SCLK, VSPI_MISO, VSPI_MOSI, VSPI_SS);  // SCLK, MISO, MOSI, SS
#endif#ifndef ALTERNATE_PINS// 使用默认的引脚 SCLK = 14, MISO = 12, MOSI = 13, SS = 15hspi->begin();
#elsehspi->begin(HSPI_SCLK, HSPI_MISO, HSPI_MOSI, HSPI_SS);  //SCLK, MISO, MOSI, SS
#endif// 拉低 SSpinMode(vspi->pinSS(), OUTPUT);     //VSPI SSpinMode(hspi->pinSS(), OUTPUT);     //HSPI SS
}void loop()
{// 使用 SPI 总线spiCommand(vspi, 0b01010101);   // junk data to illustrate usagespiCommand(hspi, 0b11001100);delay(100);
}void spiCommand(SPIClass *spi, byte data)
{spi->beginTransaction(SPISettings(spiClk, MSBFIRST, SPI_MODE0));digitalWrite(spi->pinSS(), LOW);    // 拉低 SS 传输数据spi->transfer(data);digitalWrite(spi->pinSS(), HIGH);   // 结束传输拉高spi->endTransaction();
}

ESP32 作为主机通信:

#include <Arduino.h>
#include <SPI.h>const int csPin = 5;void setup()
{Serial.begin(115200);SPI.begin();pinMode(csPin, OUTPUT);
}void loop()
{digitalWrite(csPin, LOW);   // 拉低 CS 通信SPI.transfer(0x01);         // 发送一字节digitalWrite(csPin, HIGH);  // 拉高结束通信delay(1000);digitalWrite(csPin, LOW);byte result = SPI.transfer(0x00);   // 读取一字节digitalWrite(csPin, HIGH);Serial.println(result);
}

参考:

        ESP32的VSPI和HSPI-CSDN博客

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

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

相关文章

基于SSM SpringBoot vue教务排课系统

基于SSM SpringBoot vue教务排课系统 系统功能 登录 个人中心 学生信息管理 教师信息管理 课室信息管理 班级信息管理 系别信息管理 专业信息管理 课程信息管理 选课信息管理 课表信息管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Myba…

【网络原理】UDP协议 | UDP报文格式 | 校验和 | UDP的特点 | 应用层的自定义格式

文章目录 一、UDP协议1.UDP的传输流程发送方接收方 2.UDP协议报文格式&#xff1a;长度受限校验和如何校验&#xff1a;CRC算法&#xff1a;循环冗余算法md5算法&#xff1a; 2.UDP的特点 二、开发中常见的自定义格式1.xml&#xff08;古老&#xff09;2.json&#xff08;最流行…

力扣763. 划分字母区间

Problem: 763. 划分字母区间 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建一个名为 last 的数组&#xff0c;用于存储每个字母在字符串 s 中最后出现的位置。然后&#xff0c;获取字符串 s 的长度 len。 2.计算每个字母的最后位置&#xff1a;遍历字符串 s&#xff0…

Unity开发微信小游戏(2)分享

目录 1.概述 2.代码 3.示例 4.个人作品 1.概述 这里我们能做有两件事&#xff1a; 1&#xff09;主动发起分享 2&#xff09;监听右上角分享&#xff08;...按钮&#xff0c;发朋友圈也在这里&#xff09; API&#xff1a;官方文档 2.代码 1&#xff09;主动发起分享&…

在家连学校的服务器

在家连接学校的服务器。 Step1: 首先下载一个vscode的插件 Visual Studio Code - Code Editing. Redefined 我的服务区是ubuntu20.04&#xff0c;x64的&#xff0c;所以下载这个。 Step2: 下载到本地之后&#xff0c;想办法将这个文件拷贝到你的服务器上。 Step3: 解压该包…

U盘到底要格式化成什么格式比较好?

前言 前段时间有小伙伴问我&#xff1a;U盘为啥无法粘贴超过4GB的压缩包。 相信这个问题很多人都会遇到&#xff0c;无论是压缩包、镜像文件还是电影&#xff0c;都会有超过4GB的时候。 如果文件超过了4GB&#xff0c;那么就会小伙伴遇到电脑提示&#xff1a;无法粘贴超过4G…

基于Springboot的校园食堂订餐系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园食堂订餐系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

R语言数据探索和分析7-使用随机森林模型对中国GDP及其影响因素分析

一、研究背景和意义 国内生产总值&#xff08;GDP&#xff09;是宏观经济领域中最为关注的经济统计数据之一&#xff0c;它反映了一个国家或地区在一定时期内所创造的所有最终商品和服务的总价值。GDP的增长率不仅仅是一个国家经济健康状况的关键指标&#xff0c;还直接关系到…

服务器数据恢复—异常断电导致RAID模块故障的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌ProLiant DL380系列服务器&#xff0c;服务器中有一组由6块SAS硬盘组建的RAID5阵列&#xff0c;WINDOWS SERVER操作系统&#xff0c;作为企业内部文件服务器使用。 服务器故障&#xff1a; 机房供电几次意外中断&#xff0c;服务器出现故…

AI代理架构的发展:从单一到多代理系统的演进及其影响分析

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

数据结构与算法---线性表

线性表 1.顺序表 需求分析 /*创建顺序表具体功能&#xff1a;初始化顺序表销毁顺序表获取顺序表元素个数输出顺序表中的内容自动扩容增 --- 插入数据&#xff08;包含了尾部添加功能&#xff09;删 --- 删除数据&#xff08;包含了尾部删除功能&#xff09;改 --- 修改数据查…

Android使用kts上传aar到JitPack仓库

Android使用kts上传aar到JitPack 之前做过sdk开发&#xff0c;需要将仓库上传到maven、JitPack或JCenter,但是JCenter已停止维护&#xff0c;本文是讲解上传到JitPack的方式,使用KTS语法&#xff0c;记录使用过程中遇到的一些坑. 1.创建项目(library方式) 由于之前用鸿神的w…

外网禅道配置

exportfs -avrf 修改代码&#xff0c;避免启动太慢&#xff1a;vi /opt/zbox/bin/zbox.php 启动和停止 /opt/zbox/zbox start /opt/zbox/zbox stop

YOLOv5手势物体识别(附代码)

之前是做的yolov3手势物体识别&#xff0c;最近几天我将该项目进行了重新的整理和升级&#xff0c;实现了yolov5手势物体识别&#xff0c;同时为了方便更多的人直接拿来应用&#xff0c;我生成了支持windows系统的应用小程序&#xff0c;即便你电脑上没有安装pytorch,没有安装c…

4 Spring AOP

目录 AOP 简介 传统开发模式 先来看一个需求 解决方案 AOP 图示 Spring 启用 AspectJ 基于 xml 配置 创建 pom.xml 创建 UserService 借口和 UserServiceImpl实现类 创建 LogAdvice 日志通知 创建 log4j.properties 重点&#xff1a;创建 spring-context-xml.xml 配…

MYSQL从入门到精通(二)

1、MYSQL高级概述 【1】架构概述 【2】索引优化 【3】查询截取 【4】mysql锁机制 【5】主从复制 2、MYSQL概述 【1】mysql内核 【2】sql优化工程师 【3】mysql服务器的优化 【4】各种参数常量设定 【5】查询语句优化 【6】主从复制 【7】软硬件升级 【8】容灾百分 【9】sql编…

使用Neo4j和Langchain创建知识图谱

使用Neo4j和Langchain创建知识图谱 知识图谱是组织和整合信息的强大工具。通过使用实体作为节点和关系作为边缘&#xff0c;它们提供了一种系统的知识表示方法。这种有条理的表示有利于简化查询、分析和推理&#xff0c;使知识图在搜索引擎、推荐系统、自然语言处理和人工智能…

从0开始学习制作一个微信小程序 学习部分(6)组件与事件绑定

系列文章目录 学习篇第一篇我们讲了编译器下载&#xff0c;项目、环境建立、文件说明与简单操作&#xff1a;第一篇链接 第二、三篇分析了几个重要的配置json文件&#xff0c;是用于对小程序进行的切换页面、改变图标、控制是否能被搜索到等的操作第二篇链接、第三篇链接 第四…

Windows设置Redis为开机自启动

前言 Redis作为当前最常用的当前缓存技术&#xff0c;基本上Web应用中都有使用。所以&#xff0c;每次我们在本地启动项目前&#xff0c;都必须将Redis服务端启动&#xff0c;否则项目就会启动失败。但是&#xff0c;每次都要去启动Redis就很麻烦&#xff0c;有没有办法做到开…

Python爬虫--爬取糗事百科段子

爬取糗事百科段子&#xff1a; 段子在 <div class"content"> 里面的 <span> 标签里面 不过这里有个坑&#xff0c;div 标签跟 span 标签 之间有很多空行 普通 .*? 是匹配不了的&#xff0c;需要使用模式修饰符 S S 的意思 让 .(点) 匹配&#xff0c…