1
串行外设接口
SPI
2
培训
焊锡培训资料ppt免费下载焊接培训教程 ppt 下载特设培训下载班长管理培训下载培训时间表下载
内容 – SPI模块
SPI
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
简介
STM32F2的SPI模块GPIO占用和配置
片选信号的管理
时钟极性和相位
数据格式(F2新增对TI格式的支持)
主/从设备模式的收/发配置
不同通信模式下的操作序列和状态时序
全双工通信
单工通信
CRC特性
DMA特性
状态、错误标志以及中断管理
3
培训内容 – SPI模块
SPI协议简介
STM32F2的SPI模块GPIO占用和配置
片选信号的管理
时钟极性和相位
数据格式(F2新增对TI格式的支持)
主/从设备模式的收/发配置
不同通信模式下的操作序列和状态时序
全双工通信
单工通信
CRC特性
DMA特性
状态、错误标志以及中断管理
4
SPI总线简介
SPI(Serial Peripheral Interface)由Motolora提出的一种三
线同步接口,可实现全双工通信。
数据传送以字节为单位
并采用高位在前的格式(MSB)
硬件接口
SCK:起同步作用的串行移位时钟
SDO:串行数据输出(MOSI)
SDI:串行数据输入(MISO)
CS:使能从设备的片选信号
MSB
MSB
LSB
LSB
SCK
MOSI
MISO
CS
(1) 这种情况下,双方的NSS都配置成输入
5
STM32F2的SPI模块引脚及重映射
SPI1
SCK PA.5 PB.3/JTDO
MOSI PA.7/ PB.6
MISO PA.6 PB.4/NJTRST
NSS PA.4 PA.15/JTDI
SPI2
SCK
PB.10/
PB.13/PI.1
MOSI PC.3/ PB.15/PI.3
MISO PC.2/ PB.14/PI.2
NSS PB.12/ PI.0/PB.9
SPI3
SCK PC.10 PB.3/JTDO
MOSI PC.12/ PB.5
MISO PC.11 PB.4/NJTRST
NSS PA.4 PA.15/JTDI
SPI1和SPI3上某些引脚和JTAG
接口的功能引脚复用,发生冲突:
>>把冲突的SPI引脚重映射到其
它GPIO上
>>关闭JTAG调试接口,改用
SWD在开发过程中进行调试烧写
>>调试成功后的应用,关闭JTAG
/SWD接口
6
主从设备引脚GPIO配置
主从设备都软件管理片选信号时,可以方便动态
地切换主/从关系
引脚配置列表
7
从设备片选引脚的用法(软件控制)
软件片选管理
片选信号由寄存器控制,对应NSS引脚可作它用
无需配置NSS引脚的GPIO
一旦配置好寄存器,该从设备立马被有效片选
寄存器标志
SSM @ CR1=1 SSI @ CR1=0
库函数使用
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft
SPI_InitStruct.SPI_Mode = SPI_Mode_Slave
从
设
备 SCK
SO
SI
NSS
8
从设备片选引脚的用法(硬件控制)
硬件控制
片选信号由引脚外部电平控制
NSS引脚GPIO配置为浮空/下拉输入
NSS引脚可固定接到外部低电平,片选立刻生效
NSS引脚可由主设备来控制,何时片选生效取决主设备
寄存器标志
SSM @ CR1=0 SSI @ CR1无意义
库函数使用
SPI_InitStruct.SPI_NSS = SPI_NSS_Hard
SPI_InitStruct.SPI_Mode = SPI_Mode_Slave
从
设
备 SCK
SO
SI
NSS
配置成浮空输入,
由主设备控制何时
拉低电平从
设
备 SCK
SO
SI
NSS
配置成下拉输入,
引脚连接固定的
低电平
9
主设备片选引脚的用法(软件控制)
软件片选管理
片选信号由寄存器控制,对应NSS引脚可作它用
无需配置NSS引脚的GPIO
一旦配置好寄存器,该设备立马主有效
寄存器标志
SSM @ CR1=1 SSI @ CR1=1
MSTR @ CR1=1
库函数使用
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft
SPI_InitStruct.SPI_Mode = SPI_Mode_Master
此时NSS引脚可以配置成普通GPIO去控制从设备(如
果从设备配置成硬件管理片选),那么从设备的片选信
号由主控制
主
设
备 SCK
MO
MI
NSS
10
主设备片选引脚的用法(硬件控制.方式1)
硬件控制
片选信号由引脚外部电平控制
NSS引脚GPIO配置为浮空/上拉输入
NSS引脚固定接到外部高电平,立刻主有效
NSS引脚可由第三方来控制,何时片选生效取决第三方
寄存器标志
SSM @ CR1=0 SSI @ CR1=无意义 MSTR @ CR1=1
库函数使用
SPI_InitStruct.SPI_NSS = SPI_NSS_Hard
SPI_InitStruct.SPI_Mode = SPI_Mode_Master
主
设
备 SCK
MO
MI
NSS
VDD
配置成上拉输入,
引脚连接固定的
高电平 主
设
备 SCK
MO
MI
NSS
配置成浮空输入
,由第三方控制
何时拉高电平
注意:拉高之前不能置位MSTR,否则出错MODF
11
主设备片选引脚的用法(硬件控制.方式2)
硬件控制
片选该环境中所有其它配置成硬件管理片选的从设备
常用于广播应用
NSS引脚GPIO配置为推拉复用
不适用于多主环境
若已有主设备在通信, NSS不能被拉低,并将产生Hard Fault
寄存器标志
SSM @ CR1=0 SSI @ CR1=无意义 MSTR @ CR1=1
SSOE @ CR2=1
库函数使用
SPI_InitStruct.SPI_NSS = SPI_NSS_Hard
SPI_InitStruct.SPI_Mode = SPI_Mode_Master
SPI_SSOutputCmd (SPIx, ENABLE)
如上配置完成后,一旦使能SPI,NSS拉低
SPI _Cmd(SPIx, ENABLE)
12
主设备片选引脚硬件控制.方式2示意图
Slave1
SCK MISOMOSINSS
Master
SCKMISOMOSINSS
Slave2
SCKMISOMOSINSS
Slave3
SCKMISOMOSINSS
开启SS输出性能
主设备配置1:
主设备模式
片选硬件管理
NSS配置成可编程推挽输出
使能NSS输出
主设备配置2:
主设备模式
片选软件管理
NSS配置成GPIO的输出
GPIO控制输出低电平
三个从设备配置:
从设备模式
片选硬件管理
NSS配置成浮空输入
13
时钟极性和相位
四种数据采样时钟延
CPOL决定时钟空闲时的稳定电平,对主/从都有效
CPOL=0:空闲时低电平
CPOL=1:空闲时高电平
CPHA决定数据采样时刻
CPHA=0:第一个时钟延开始采样MSBit
CPHA=1:第二个时钟延开始采样MSBit
注意事项
修改CPOL/CPHA之前先要通过复位SPE来关掉SPI
主/从通信双方要配置成相同的时钟模式
SCK空闲时的电平要和CPOL的设置一致
CPOL=0:需要下拉SCK引脚
CPOL=1:需要上拉SCK引脚
14
四种时钟模式
空闲时间高电平 CPOL=1
空闲时间低电平 CPOL=0
第二个时钟延采样 CPHA=1
第一个时钟延采样 CPHA=0
空闲时间高电平 CPOL=1
空闲时间低电平 CPOL=0
15
SPI时钟波特率
主设备决定SPI时钟波特率
BR[2:0]@SPI_CR1
fPCLK /i(i=2、4、8、16、32、64、128、256)
8个分频因子
fPCLK不是CPU频率,而是外设总线频率
STM32F2的SPI最快时钟30MHz,芯片
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
时决定的
SPI1在APB2上,可获得最高设计频率,30MHz
SPI2/3在APB上,可获得的最高频率只有15MHz
最高波特率会随着扇出数的增加而相应下降,需增加外部缓冲
从设备时钟来自于主设备,但是不能超过自身所
在APB总线频率的一半(max fPCLK/2)
SPI模式下从设备,无须配置BR[2:0]
TI模式下从设备,对BR[2:0]的设置,控制trelease
不同于STM32F1
16
STM32F2的SPI支持的数据格式
LSBFIRST决定MSB还是LSB先移位出去
LSBFIRST@SPI_CR1= 1:LSB先移位出去
LSBFIRST@SPI_CR1= 0:MSB先移位出去
DFF决定数据帧是8位还是16位
DFF@SPI_CR1= 0:8位数据帧格式
DFF@SPI_CR1= 1:16位数据帧格式
STM32F2的SPI新增对TI格式的支持
寄存器标志 FRF@SPI_CR2 = 1
函数库使用 SPI_TIModeCmd (SPIx, Enable)
17
TI帧格式
TI模式特性
主/从设备的NSS引脚相互连接
主设备在时钟上升沿,驱动NSS产生一个周期的正脉冲后,数据
才开始传输
时钟上升沿驱动输出数据;下降沿锁存数据
四线全双工通信
TI模式下,无论主/从设备:
>> 时钟极性/相位自动遵循TI协议要求,无需配置
>> 片选信号自动遵循TI协议,无需配置
18
培训内容 – SPI模块
SPI协议简介
STM32F2的SPI模块GPIO占用和配置
片选信号的管理
时钟极性和相位
数据格式(F2新增对TI格式的支持)
主/从设备模式的收/发配置
不同通信模式下的操作序列和状态时序
全双工通信
单工通信
CRC特性
DMA特性
状态、错误标志以及中断管理
19
主/从模式配置
从设备
时钟输入信号
主设备
时钟输出信号
BR不影响数据传输率 BR决定数据传输率
静态配置
1)设置DFF定义帧长度
2)设置CPOL&CPHA定义时钟模式
3)设置LSBFIRST定义帧格式
4)硬件片选:在通信过程中NSS引脚连到
低电平;软件片选:置位SSM并清零SSI
5)设置FRF选择Moto模式或TI模式
6)清零MSTR并置位SPE
0)设置BR来决定时钟波特率
1)设置DFF定义帧长度
2)设置CPOL&CPHA定义时钟模式
3)设置LSBFIRST定义帧格式
4)硬件片选:在通信过程中NSS引脚连
到高电平;软件片选:置位SSM和SSI
5)设置FRF选择Moto模式或TI模式
6)置位MSTR和SPE
TI模式备注
1)标有下划线的步骤都不需要
2)BR不控制数据传输率,但控制MISO
引脚上数据保持时间trelease
标有下划线的步骤都不需要
备注 在使能主/从之前,就要把时钟空闲电平设置到稳定状态
20
主/从设备收/发操作
从设备
时钟输入信号
主设备
时钟输出信号
BR不影响数据传输率 BR决定数据传输率
发送
写操作时数据被并行装入Tx buffer;收到时
钟信号以及MSB的同时发送。剩余位装入
移位寄存器,TxE置位并产生中断
数据写入Tx buffer则开始发送。发送
MSB的同时其余位送到移位寄存器,
TxE置位并产生中断
接收
接收完一帧,数据从移位寄存器送到Rx buffer,RxNE置位并产生中断。读操作返
回buffer中的数据,并清除RxNE
备注
为了保证发送数据流的连续:可以在TxE置位时写入下一个待发送的数据,此时上
一个数据还在移位寄存器和总线上发送。写操作之前,必须确认TxE标志置位;
参见“全双工时序和标志图”。
主设备发送时钟之前就要使能从设备并且把它待发送的数据放在数据寄存器中;
21
培训内容 – SPI模块
SPI协议简介
STM32F2的SPI模块GPIO占用和配置
片选信号的管理
时钟极性和相位
数据格式(F2新增对TI格式的支持)
主/从设备模式的收/发配置
不同通信模式下的操作序列和状态时序
全双工通信
单工通信
CRC特性
DMA特性
状态、错误标志以及中断管理
22
通信模式
全双工 两条数据线,收发同时进行
单工
一条数据线
单线&双向分时
BIDIMODE=1
原来的输出线作为唯一的数据线
>> 主设备:使用MOSI
>>从设备:使用MISO
由BIDIOE控制数据方向
>> BIDIOE=1:输出
>> BIDIOE=0:输入
单线&单向
BIDIMODE=0
只发送 和全双工类似,只是接收引脚可以作GPIO
只接收
RXONLY=1
发送引脚可作它用
启动通信:配置并使能SPI(无须发送数据,时
钟信号会自动送出) *
关闭通信:
>> 主设备:清零SPE
>> 从设备:片选无效或SCK停止
23
“全双工”收发操作序列
主/从设备都适用:
(1) 置位SPE使能SPI
(2) 往SPI_DR写入第一个待发送数据
(3) 等待TxE置位后写入第二个带发送数据
(4) 等待RxNE置位后从SPI_DR读取第一个收到的数据
重复以上两个步骤,直到收到倒数第二个数据
(5) 等待RxNE置位,读取最后一个数据
(6) 等待TxE置位后,再等待BSY清零,再关闭SPI
以上步骤也可以用RxNE和TxE中断完成
注意主/从设备方各自BUSY标志的不同
24
“全双工”时序和标志
主设备
从设备
2 3 4 3 4 5
loop
25
“只发送”操作序列
BIDIMODE =0 RXONLY =0
主从设备都适用:
(1) 置位SPE使能SPI
(2) 往SPI_DR写入第一个待发送数据
(3) 等待TxE置位后写入第二个带发送数据
重复以上步骤,直到所有数据都写入SPI_DR
(4) 等待TxE置位后,再等待BSY清零,再关闭SPI
以上步骤也可以用TxE中断完成
该模式发送完两个数据,OVR会合理地置位
26
“只发送”时序和标志
主设备
从设备
2 3 4 3 4
4
软件等待TxE=1,再等待BSY=0,关闭SPI
27
“只接收”操作序列
主设备 从设备
初始化序
列
置位RXONLY,使能“只接收”模式
BIDIMODE =0,RXONLY =1
开始序列
置位SPE,使能SPI
一旦使能了SPI,立即产生时钟信号,以
接收数据
片选有效,并且时钟信号到来,
才开始接收数据
接收数据 等待RxNE置位,以读取数据
结束序列
SPI模式:
等到读取完倒数第二个数据,再使用软件
循环等待一个SPI时钟周期,关闭SPI;
等待最后一个RxNE置位,读取最后一个
数据,再关闭SPI时钟 任何时候都可以关闭SPI,线
上的当前传输还是能完成;
若要进一步关闭时钟或进入低
功耗模式,还要等到BSY清零
TI模式:
等到读取完倒数第二个数据;再等待一个
SPI时钟周期,在最后一个数据的最后一
位开始传输之前,关闭SPI;
等待最后一个RxNE置位,读取最后一个
数据,再关闭SPI时钟
28
“只接收”时序和标志
主设备
从设备
29
双向单线模式
双向单线之发送
和“只发送”模式类似
设置BIDIMODE =1 BIDIOE =1,再使能SPI
双向单线之接收
和“只接收”模式类似
设置BIDIMODE =1 BIDIOE =0,再使能SPI
BSY标志的异常表现
30
培训内容 – SPI模块
SPI协议简介
STM32F2的SPI模块GPIO占用和配置
片选信号的管理
时钟极性和相位
数据格式(F2新增对TI格式的支持)
主/从设备模式的收/发配置
不同通信模式下的操作序列和状态时序
全双工通信
单工通信
CRC特性
DMA特性
状态、错误标志以及中断管理
31
SPI的CRC计算单元
内嵌硬件CRC计算单元以支持可靠通信
收、发独立的CRC计算单元
根据数据帧长度,提供不同的计算公式(CRC8/16)
涉及到的寄存器
SPI_CR1:CRCEN、CRCNext
SPI_SR:CRCERR
SPI_CRCPR:供CRC计算的多项式寄存器
SPI_TXCRCR/SPI_RXCRCR
只读寄存器( BSY位置时读取的值可能有误)
包含从CRC单元使能后,所发送/接收到的所有数据的CRC值
低8位或全部16位有效,取决于数据长度
使能CRC / 发送CRC
寄存器:CRCEN@SPI_CR1 / CECNext@SPI_CR1
函数库操作:
SPI_CalculateCRC(SPIx, ENABLE)
SPI_TransmitCRC(SPIx)
32
使用CRC功能的SPI通信
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
配置通信模式
CPOL、CPHA、LSBFirst、BR、SSM、SSI、MSTR
配置CRC多项式: SPI_CRCPR
使能CRC计算以复位CRC寄存器:CRCEN
使能SPI:SPE
开始数据通信,直到完成倒数第二个数据:
全双工或单工发送模式
最后一个数据写进SPI_DR之后,置位CRCNEXT
最后一个数据发送完成后,就发送CRC
单工接收模式
收到倒数第二个数据之后,置位CRCNEXT
CRC发送完成后CRCNext复位
CRC检验
全双工和单工只收模式:
收到的CRC数值和SPI_RXCRCR比较
不一致则报错:CRCERR@SPI_SR
33
培训内容 – SPI模块
SPI协议简介
STM32F2的SPI模块GPIO占用和配置
片选信号的管理
时钟极性和相位
数据格式(F2新增对TI格式的支持)
主/从设备模式的收/发配置
不同通信模式下的操作序列和状态时序
全双工通信
单工通信
CRC特性
DMA特性
状态、错误标志以及中断管理
34
SPI的DMA功能
每个SPI模块有两个DMA请求
发送请求、接收请求
可以同时或分别打开
使能CRC和DMA模式后,会在数据发送完成后自
动发送CRC值
无须CPU在特定时间置位CRCNext
DMA发送完成后的标志检查,确保通信完成
等到TCIF=1 再等TXE=1 再等BSY=0
使能控制 触发信号 DMA通道
SPI发送请求 TXDMAEN TXE置位 参见《参考手册》
表格
关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载
22&23
SPI接收请求 EXDMAEN RXNE置位
35
DMA发送示例图
DMA模式发送:关闭SPI之前要等待这些标志
36
DMA接收示例图
DMA模式接收:
关闭SPI之前只要等待这个标志
37
培训内容 – SPI模块
SPI协议简介
STM32F2的SPI模块GPIO占用和配置
片选信号的管理
时钟极性和相位
数据格式(F2新增对TI格式的支持)
主/从设备模式的收/发配置
不同通信模式下的操作序列和状态时序
全双工通信
单工通信
CRC特性
DMA特性
状态、错误标志以及中断管理
38
状态标志
发送缓冲空 TxE
发送缓冲的数据已经移到移位寄存器了
CPU/DMA可以往发送缓冲写数据了(写SPI_DR)
接收缓冲空 RxNE
移位寄存器收到的数据以及移到接收缓冲了
CPU/DMA可以从接收缓冲读数据了(读SPI_DR)
总线忙 Busy
常用于应用要关掉SPI并进入低功耗模式前检测通信是否结束
在多主通信环境中可用于避免写冲突
发生主模式错误(MODF),硬件清除该标志
Busy位 连续通信 间隔通信 备注
主设备 通信期间一直保持置位
间隔期间被拉低
例外:主模式(MSTR=1)的
单线双向(BIDIMODE=1)之
接收(BDOE=0)时,BSY保
持低电平
从设备
每字节/半字之间,BSY被拉低
一个SPI的时钟周期
39
错误标志
错误类别 何时发生 影响 如何清除
主模式错误
MODF
主设备:硬件管理片选时
NSS引脚被拉低;软件管理
片选时SSI位清零
多主环境下的从设备:发生
多主冲突
置位MODF并产生中断;
硬件清除SPE和MSTR
在MODF置位时对
SPI_SR执行读或写
操作;写SPI_CR1
溢出错误
OVR
从设备还未清除RxNE(上一
个数据还未读取),主设备
又发送了新数据
置位OVR并产生中断;接
收缓冲中仍是上一个数据,
随后的数据都丢失
读取SPI_DR,再
读取SPI_SR
校验错误
CRCERR
移位寄存器中收到的校验数
据和 RXCRCR中计算出来
的数值不一致
软件写0清零
帧格式错误
TIFRFE
配置成TI模式的从设备:在
通信过程中出现NSS引脚上
的脉冲(参见图258)
置位TIFRFE并产生中断。
SPI不会被关掉,而是忽
略掉该脉冲,继续等待下
一个NSS脉冲,再发起下
一次传输。数据会丢失
读取SPI_SR
40
中断管理
状态和错误标志 中断事件 中断使能控制
TxE 发送缓冲空 TxEIE
RxNE 接收缓冲满 RxNEIE
BUSY
MODF 主模式错误
ERRIE
OVR 溢出错误
CRCERR CRC校验错误
TIFRFE TI帧格式错误
41
注意要点杂项
数据帧格式
只支持8位或16位长度
非常规帧长度的处理
GPIO模拟
拼接发送数据,剩余位用GPIO模拟
必须在主/从设备使能之前,根据时钟极性把SCK设置到相
应水平
设置时钟空闲高(低)电平,则SCK最好上(下)拉
作为从设备,必须在主设备的时钟来临之前使能好SPI,
并且把数据放进数据寄存器
波特率较高时建议使用DMA
减少字节/字之间的空闲时间,从而提高带宽