STM32 SPI(基础概念)

news2024/11/19 18:37:16

文章目录

  • 前言
  • 一、SPI通信协议概述
  • 二、SPI硬件框图和软件层次
  • 三、SPI通信时序
  • 四、SPI控制器
  • 总结


前言

本篇文章来给大家讲解一个非常重要的通信协议SPI,SPI在MCU和外设之间的通信用的是非常多的,这篇文章将带大家先来学习SPI的一些概念。

一、SPI通信协议概述

SPI(Serial Peripheral Interface)是一种同步串行数据通信协议,通常用于在数字系统之间传输数据。它是一种非常常见的通信协议,广泛应用于微控制器、传感器、存储器、外围设备等各种数字电路之间的通信。

以下是SPI通信协议的基本概述:

通信方式:

SPI 是一种全双工通信协议,意味着它允许同时在一条线上进行双向数据传输。通常由一个主设备(Master)和一个或多个从设备(Slave)组成。
主设备负责发起通信,生成时钟信号,并控制从设备的选择。
从设备在接收到主设备的请求后,通过从设备选择信号(Slave Select)响应通信,并进行数据传输。

在这里插入图片描述

通信线:

SPI使用四根线进行通信:

SCLK(Serial Clock):时钟线,由主设备产生,用于同步数据传输。
MOSI(Master Out Slave In):主设备输出,从设备输入,用于主设备向从设备发送数据。
MISO(Master In Slave Out):从设备输出,主设备输入,用于从设备向主设备发送数据。
SS(Slave Select):从设备选择线,由主设备控制,用于选择要进行通信的从设备。

传输方式:

SPI采用全双工传输,意味着数据可以在主设备和从设备之间同时双向传输。
通信数据是通过数据线(MOSI和MISO)进行传输的,并由时钟信号(SCLK)进行同步。
通常采用一种主设备定时从设备数据接收的方式进行通信,时钟信号的极性和相位可以在通信协议中进行配置。

数据传输格式:

SPI通信中的数据传输可以是不同长度的字节,通常是8位,但有时也支持其他位数,如16位或32位。

数据传输可以是带有附加控制位的帧,也可以是简单的数据字节SPI通信的协议并没有固定的数据帧格式,而是根据具体的应用需求进行定义和配置。

工作模式:

SPI有四种工作模式,由时钟极性(CPOL)和相位(CPHA)来定义:
Mode 0: CPOL = 0, CPHA = 0
Mode 1: CPOL = 0, CPHA = 1
Mode 2: CPOL = 1, CPHA = 0
Mode 3: CPOL = 1, CPHA = 1
工作模式决定了时钟信号在何时激活以及数据采样的时机,以确保正确的数据传输。

二、SPI硬件框图和软件层次

在芯片的内部有SPI控制器可以用来控制外部的Flash等设备。
在这里插入图片描述
软件层次:

1.应用程序使用Flash的驱动程序

2.Flash驱动程序需要根据模块的数据手册来编写

3.操作具体模块寄存器需要通过STM32 的SPI控制器来操作
在这里插入图片描述

三、SPI通信时序

SPI通信主要根据CS,MOSI,MISO,SCK这四个引脚来控制。

首先需要拉低片选引脚选择对应的从设备进行通信,在通信完成后将片选引脚拉高。
在这里插入图片描述
SCK引脚来提供时钟信号,时钟信号主要由主机来发出控制。

MOSI和MISO用于数据的接收和发送,主机发送多少个字节数据从机就能够接收多少个字节的数据。

时钟极性决定了SCK时钟线空闲的时候是高电平还是低电平,当CPOL = 0时 SCK在空闲状态是低电平,CPOL = 1时 SCK在空闲状态是高电平。
在这里插入图片描述
CPHA时钟相位决定了在奇数边沿进行采样还是在偶数边沿进行采样。

当CPHA = 0的时候在奇数边沿进行数据的采样:
在这里插入图片描述
当CPHA = 1的时候在偶数边沿进行数据的采样:
在这里插入图片描述

四、SPI控制器

下面是SPI控制器的框图:
在这里插入图片描述
通过SPI控制寄存器中的SPI_CR1中的CPOL和CPHA可以来控制SPI的工作模式。
在这里插入图片描述
波特率控制:
在这里插入图片描述
SPI控制器数据发送流程:
在这里插入图片描述
下面是SPI控制器发送数据的基本流程:

发送缓冲区(Transmit Buffer):首先,主设备将要发送的数据加载到发送缓冲区中。发送缓冲区是一个存储器单元,用于暂时存放将要传输的数据。

移位寄存器(Shift Register):SPI控制器内部有一个移位寄存器,用于将数据从发送缓冲区移至串行输出线(MOSI)。在传输过程中,数据从发送缓冲区被移入移位寄存器,然后以串行方式输出到MOSI线上。

MOSI(Master Out Slave In):MOSI线是SPI总线上的主设备输出从设备输入线。主设备通过MOSI线将数据发送给从设备。移位寄存器中的数据被推送到MOSI线上,以便发送给从设备。

接收缓冲区(Receive Buffer):在发送数据的同时,SPI控制器也可以接收来自从设备的数据。接收缓冲区是一个存储器单元,用于暂时存放从MISO线接收到的数据。

MISO(Master In Slave Out):MISO线是SPI总线上的主设备输入从设备输出线。当主设备发送数据时,从设备可以同时将数据发送回主设备。主设备通过MISO线接收从设备发送的数据。

写入8位数据就会读取到8位数据:SPI通常是一个全双工(Full-Duplex)通信协议,意味着在发送数据的同时也可以接收数据。当主设备向从设备发送8位数据时,在同一时钟周期内,主设备也可以从从设备接收8位数据。因此,发送和接收是同步进行的,每次发送数据都会同时接收到相应数量的数据。

综上所述,SPI控制器发送数据的流程涉及将数据从发送缓冲区移入移位寄存器,通过MOSI线发送给从设备,并在接收缓冲区接收来自从设备的数据。同时,SPI是一个全双工通信协议,每次发送数据都会同时接收到相应数量的数据。

总结

本篇文章主要是讲解了SPI的基础概念和基本原理框图,下一篇文章我们将给大家讲解STM32Cubemx配置SPI通信协议,并且使用SPI来读写Flash。

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

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

相关文章

alist修改密码(docker版)

rootarmbian:~# docker exec -it [docker名称] ./alist admin set abcd123456 INFO[2024-02-20 11:06:29] reading config file: data/config.json INFO[2024-02-20 11:06:29] load config from env with prefix: ALIST_ INFO[2024-02-20 11:06:29] init logrus..…

《TCP/IP详解 卷一》第3章 链路层

目录 3.1 引言 3.2 以太网 3.3 全双工 省点 自动协商 流量控制 3.4 网桥和交换机 3.5 WiFi 3.6 PPP协议 3.6.1 PPP协议流程 3.7 环回 3.8 MTU和路径MTU 3.9 隧道基础 3.9.1 GRE 3.9.2 PPTP 3.9.3 L2TP 3.10 与链路层相关的攻击 3.11 总结 3.1 引言 城域网&…

2024年1月京东洗衣机行业数据分析:TOP10品牌销量销额排行榜

鲸参谋监测的京东平台1月份洗衣机市场销售数据已出炉! 根据鲸参谋电商数据分析平台显示,今年1月份,京东平台上洗衣机的销量约160万件,环比上个月增长约42%,同比去年下滑7%;销售额约28亿元,环比…

Java零基础 - 三元运算符

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

Golin 弱口令/漏洞/扫描/等保/基线核查的快速安全检查小工具

下载地址: 链接:https://pan.quark.cn/s/db6afba6de1f 主要功能 主机存活探测、漏洞扫描、子域名扫描、端口扫描、各类服务数据库爆破、poc扫描、xss扫描、webtitle探测、web指纹识别、web敏感信息泄露、web目录浏览、web文件下载、等保安全风险问题风险…

强大的文本绘图——PlantUML

PlantUML是一款开源工具,它允许用户通过简单的文本描述来创建UML图(统一建模语言图)。这种方法可以快速地绘制类图、用例图、序列图、状态图、活动图、组件图和部署图等UML图表。PlantUML使用一种领域特定语言(DSL)&am…

通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试,发布到CSDN

效果图 设备树代码 myplatform{compatible "hqyj,myplatform";led1-gpio<&gpioe 10 0>;led2-gpio<&gpiof 10 0>;led3-gpio<&gpioe 8 0>; interrupt-parent <&gpiof>;interrupts<9 0>;reg<0X12345678 …

idea在工具栏中显示快速创建包和类的图标

一、效果图 点击需要创建包或者类的位置&#xff0c;在点击对用的图标就可以快速创建类或者包了。 二、设置 步骤一 View-->Appearance-->Toolbar 步骤二 File-->Settings-->Appearance & Behavior-->Menus and Toolbars-->Main Toolbar-->----…

Vue3 (unplugin-auto-import自动导入的使用)

安装 参考链接 npm i -D unplugin-auto-importvite.config.ts里面配置 import AutoImport from unplugin-auto-import/viteAutoImport({imports:[ vue,vue-router]})重新运行项目会生成一个auto-imports.d.ts的文件 /* eslint-disable */ /* prettier-ignore */ // ts-nochec…

在Ubuntu系统下搭建TDengine集群

目录 一、Ubuntu虚拟机创建 二、系统相关配置 1、设置系统hostname 2、网络配置及IP规划 3、配置FQDN&#xff08;etc/hosts&#xff09; 4、服务端口设置 三、TDengine server安装 1、服务安装 2、修改配置 3、启动taosd 4、服务卸载 四、客户端安装 1、client安…

密评技术要求实施详解:每一步都关键

密评简介 密评定义&#xff1a;全称商用密码应用安全性评估, 是对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估的活动。 评测依据&#xff1a;GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》。 密评对象&…

(done) 什么是特征值和特征向量?如何求特征值的特征向量 ?如何判断一个矩阵能否相似对角化?

什么是齐次方程&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198159 行列式和是否有解的关系&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198215 特征值和特征向量 参考视频&#xff1a;https://www.bilibili.com/video/BV…

【MATLAB】CEEMD_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 CEEMD_MFE_SVM_LSTM神经网络时序预测算法是一种结合了多种先进技术的复杂预测方法&#xff0c;旨在提高时序预测的准确性和稳定性。下面是对该算法的详细介绍&#xff1a; CEEMD&#xff…

基于Java+SpringBoot+Vue前后端分离婚纱影楼管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容&#xff1a;SpringBoot、Vue、SSM、HLM…

【监督学习之决策树和随机森林】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱决策树&#xff08;Decision Tree&#xff09;随机森林&#xff08;Random Forest&#xff09; 简述概要 了解决策树和随机森林 知识图谱 决策树和随机森林都是机器学习中常用的算法&#xff0c;它们在处…

.net core wbeapi 关于swagger的配置

当创建好一个webapi之后&#xff0c;在Program.cs中注释掉原本的AddSwaggerGen&#xff0c;修改为如下配置 Program.cs //builder.Services.AddSwaggerGen();builder.Services.AddSwaggerGen(options >{options.SwaggerDoc("v1", new OpenApiInfo{Version "…

利用docker一键部署LLaMa到自己的Linux服务器,有无GPU都行、可以指定GPU数量、支持界面对话和API调用,离线本地化部署包含模型权重合并

利用docker一键部署LLaMa到自己的Linux服务器,有无GPU都行、可以指定GPU数量、支持界面对话和API调用,离线本地化部署包含模型权重合并。两种方式实现支持界面对话和API调用,一是通过搭建text-generation-webui。二是通过llamma.cpp转换模型为转换为 GGUF 格式,使用 quanti…

介绍 CI / CD

目录 一、介绍 CI / CD 1、为什么要 CI / CD 方法简介 1、持续集成 2、持续交付 3、持续部署 2、GitLab CI / CD简介 3、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 GitLab CI / CD 6、GitLab CI / CD功能集 一、介绍 CI / CD 在本文档中&#x…

.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2

前言 很多同学都不愿给电脑设动态壁纸&#xff0c;其中有个重要原因就是嫌它占资源过多。今天大姚分享一个.NET开源、免费&#xff08;MIT license&#xff09;的一个小而快并且功能强大的 Windows 动态桌面软件&#xff0c;支持视频和网页动画播放&#xff1a;DreamScene2。 …

【人脸朝向识别与分类预测】基于LVQ神经网络

课题名称&#xff1a;基于LVQ神经网络的人脸朝向识别分类 版本日期&#xff1a;2024-02-20 运行方式&#xff1a;直接运行GRNN0503.m文件 代码获取方式&#xff1a;私信博主或 企鹅号:491052175 模型描述&#xff1a; 采集到一组人脸朝向不同角度时的图像&#xff0c;图像…