STM32 SPI(基础概念)

举报
yd_274589494 发表于 2024/05/26 08:29:19 2024/05/26
【摘要】 @TOC 前言本篇文章来给大家讲解一个非常重要的通信协议SPI,SPI在MCU和外设之间的通信用的是非常多的,这篇文章将带大家先来学习SPI的一些概念。 一、SPI通信协议概述SPI(Serial Peripheral Interface)是一种同步串行数据通信协议,通常用于在数字系统之间传输数据。它是一种非常常见的通信协议,广泛应用于微控制器、传感器、存储器、外围设备等各种数字电路之间的通...

@TOC


前言

本篇文章来给大家讲解一个非常重要的通信协议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。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。