STM32学习---SPI

SPI概述

SPI介绍

SPI:(Serial Peripheral Interface),串行外设接口。SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。
(1)MISO– Master Input Slave Output,主设备数据输入,从设备数据输出;
(2)MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入;
(3)SCLK– Serial Clock,时钟信号,由主设备产生;
(4)CS – Chip Select,从设备使能信号,由主设备控制。
最大传输速率:十几Mbit/s
SPI优点
1):支持全双工通信
2):通信简单
3):数据传输速率快
缺点
没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。

通信描述方式:
1、串行,并行
2、同步,异步
3、单工,半双工,全双工

物理拓扑图

1、一主一从
在这里插入图片描述
2、一主多从(从机不同)
在这里插入图片描述
3、一主多从(从机相同)
在这里插入图片描述
STM32作为主机,则CS只是普通的IO口,MOSI和MISO两个数据引脚需要复用,SCLK需要复用,CS不需要复用。
STM32作为从机有一个自己片选引脚NSS。
在这里插入图片描述

SPI特性

● 基于三条线的全双工同步传输 -》MOSI MISO SCLK
● 基于双线的单工同步传输,其中一条可作为双向数据线
● 8 位或 16 位传输帧格式选择
● 主模式或从模式操作 -》STM32可以作为主设备也可以作为从设备
● 多主模式功能
● 8 个主模式波特率预分频器(最大值为 fPCLK/2) -》通信速率
● 从模式频率(最大值为 fPCLK/2)
● 对于主模式和从模式都可实现更快的通信
● 对于主模式和从模式都可通过硬件或软件进行 NSS 管理:动态切换主/从操作
● 可编程的时钟极性和相位 -》CPOL(时钟极性) CPHA(时钟相位)
● 可编程的数据顺序,最先移位 MSB 或 LSB
● 可触发中断的专用发送和接收标志
● SPI 总线忙状态标志
● SPI TI 模式
● 用于确保可靠通信的硬件 CRC 功能:
— 在发送模式下可将 CRC 值作为最后一个字节发送
— 根据收到的最后一个字节自动进行 CRC 错误校验
● 可触发中断的主模式故障、上溢和 CRC 错误标志
● 具有 DMA 功能的 1 字节发送和接收缓冲器:发送和接收请求

SPI的时钟相位和时钟极性

CPOL:(时钟极性)数据线空闲时的时钟线电平状态,复位情况下默认为低电平;
位1 CPOL:时钟极性 (Clock polarity)
0:空闲状态时,SCK保持低电平 1:空闲状态时,SCK保持高电平
注意:正在通信时不应更改此位。
库函数:CPOL_Low CPOL_High

CPHA:(时钟相位)指的是数据线发送数据锁存位置,可以选择第一个边沿锁存或者第二个边沿锁存。
当复位时,CPHA为0,则默认为第一个边沿锁存数据。
位 0 CPHA:时钟相位 (Clock phase)
0:从第一个时钟边沿开始采样数据 1:从第二个时钟边沿开始采样数据
注意:正在通信时不应更改此位。
在这里插入图片描述
在这里插入图片描述

SPI资源

STM32F407的SPI资源,分别有SPI1,SPI2,SPI3
在这里插入图片描述

SPI框图分析

SPI通信特点-主从通信
STM32->从机,SPI存在于STM32,STM32作为主机时,此时移位寄存器发送端MOSI,接收端为MISO。
STM32作为从机,移位寄存器的发送端MISO,接收端接到MOSI。
在这里插入图片描述
● MISO:主输入/从输出数据。此引脚可用于在从模式下发送数据和在主模式下接收数据。
● MOSI:主输出/从输入数据。此引脚可用于在主模式下发送数据和在从模式下接收数据。
● SCK:用于 SPI 主器件的串行时钟输出以及 SPI 从器件的串行时钟输入。
● NSS:从器件选择。这是用于选择从器件的可选引脚。此引脚用作“片选”,可让 SPI
主器件与从器件进行单独通信,从而并避免数据线上的竞争。从器件的 NSS 输入可由主器件上的标准 IO 端口驱动。NSS 引脚在使能(SSOE 位)时还可用作输出,并可在SPI 处于主模式配置时驱动为低电平。通过这种方式,只要器件配置成 NSS 硬件管理模式,所有连接到该主器件 NSS 引脚的其它器件 NSS 引脚都将呈现低电平,并因此而作为从器件。当配置为主模式,且 NSS 配置为输入(MSTR=1 且 SSOE=0)时,如果NSS 拉至低电平,SPI 将进入主模式故障状态:MSTR 位自动清零,并且器件配置为从模式。

标志位状态

在这里插入图片描述

SPI寄存器

状态寄存器SR

在这里插入图片描述
位 7 BSY:忙标志 (Busy flag)
0:SPI(或 I2S)不繁忙
1:SPI(或 I2S)忙于通信或者发送缓冲区不为空
此标志由硬件置 1 和清零。
位 1 TXE:发送缓冲区为空 (Transmit buffer empty)
0:发送缓冲区非空
1:发送缓冲区为空
位 0 RXNE:接收缓冲区非空 (Receive buffer not empty)
0:接收缓冲区为空
1:接收缓冲区非空

数据寄存器DR

在这里插入图片描述
位 15:0 DR[15:0]:数据寄存器 (Data register)
已接收或者要发送的数据。
数据寄存器分为 2 个缓冲区,一个用于写入(发送缓冲区),一个用于读取(接收缓冲
区)。对数据寄存器执行写操作时,数据将写入发送缓冲区,从数据寄存器执行读取时,将
返回接收缓冲区中的值。
针对 SPI 模式的说明:
发送或接收的数据为 8 位或 16 位,具体取决于数据帧格式选择位(SPI_CR1 寄存器中的 DFF)。必须在使能 SPI 前进行此项选择,以确保操作正确。
对于 8 位数据帧,缓冲区为 8 位,只有寄存器的 LSB (SPI_DR[7:0]) 用于发送/接收。
在接收模式下,寄存器的 MSB (SPI_DR[15:8]) 强制为 0。
对于 16 位数据帧,缓冲区为 16 位,整个寄存器 SPI_DR[15:0] 均用于发送/接收。

控制寄存器1CR1

在这里插入图片描述
位 15 BIDIMODE:双向通信数据模式使能 (Bidirectional data mode enable)
0:选择双线单向通信数据模式 —全双工
1:选择单线双向通信数据模式 —半双工
位 14 BIDIOE:双向通信模式下的输出使能 (Output enable in bidirectional mode)
此位结合 BIDIMODE 位,用于选择双向通信模式下的传输方向
0:禁止输出(只接收模式)
1:使能输出(只发送模式)
注意:在主模式下,使用 MOSI 引脚;在从模式下,使用 MISO 引脚。
位 11 DFF:数据帧格式 (Data frame format)
0:为发送/接收选择 8 位数据帧格式
1:为发送/接收选择 16 位数据帧格式
位 7 LSBFIRST:帧格式 (Frame format)
0:先发送 MSB
1:先发送 LSB
位 5:3 BR[2:0]:波特率控制 (Baud rate control)
000: fPCLK/2 100: fPCLK/32
001: fPCLK/4 101: fPCLK/64
010: fPCLK/8 110: fPCLK/128
011: fPCLK/16 111: fPCLK/256
注意:正在通信时不应更改这些位。
位1 CPOL:时钟极性 (Clock polarity)
0:空闲状态时,SCK保持低电平
1:空闲状态时,SCK保持高电平
注意:正在通信时不应更改此位。
不适用于 I2S 模式和 SPI TI 模式
位 0 CPHA:时钟相位 (Clock phase)
0:从第一个时钟边沿开始采样数据
1:从第二个时钟边沿开始采样数据
注意:正在通信时不应更改此位

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值