stm32串行外设接口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串行外设接口 SPI
通信外设
SPI特性(1)
3线全双工同步传输 2线半双工/单工同步传输 时钟极性、相位以及数据位序(MSB或LSB)可设置 支持主设备、从设备,以及多主模式 片选信号的软、硬件管理
硬件CRC(用于8位或16位长度的帧)
能触发中断的标志(TxE、RxNE、MODF、OVR、CRCERR、FRE) 可配置的时钟速度fPCLK/2,高达18MHz BSY标志用于检查当前总线上是否有数据在传输 自动发送CRC的DMA传输(独立的发送、接收请求)
TI模式使能:FRF=1 片选信号在最后一个数据位时拉高
片选和时钟信号都由硬件管理,CPHA和CPOL无效 该模式下SSM、SSI、SSOE、NSSP都无效 主、从设备都可以使用该模式
主设备的BR决定总线波特率 从设备的BR决定SO输出高阻的保持时间
8
通信模式:全双工
同时发送和接收数据
16
FIFO带来的数据pack
当数据帧长度不超过1个字节,可通过对SPI_DR的单 次16位读写操作同时访问处理2个数据帧
先访问处理LSB字节的数据帧,再MSB字节的数据帧 只传输有效位,2*DS个时钟脉冲
用途
数据帧较小,通信速度较快,数据pack可降低RxNE和TxE 事件的频率,提高系统性能
数据pack的使用图例
数据帧长度=4,数据位序=MSB,接收FIFO门限=2字节
对SPI_DR的一次16位写操作:0x040A 通过8个时钟脉冲依次发送2个数据:0x0A 0x04 2个数据帧收到FIFO后,触发一次RxNE事件,对SPI_DR的一次16 位读操作,从MSB和LSB字节分别获得两个数据帧的内容
关闭操作要在一个时间窗内完成:最后一个数据的第一个位的 采样时间之后,下一个数据开始传输之前
从设备
被动在时钟到来接收数据或发送数据;因此必须在主设 备送出时钟信号之前做好接收的准备,并且把要发送的 数据事先放好在发送FIFO中;主设备要给从设备足够 的时间做这些准备工作以及对收到的数据处理。
13
多个从设备组成菊花链
数据线连成一个闭合的回路
主设备提供时钟把数据在各 个从设备之间移动 每组时钟脉冲之间主设备要 留给从设备足够的时间来把 收到的数据拷贝到发送寄存 器中 只需要一个共用的片选信号 ;时钟信号和片选信号都连 在一起
14
各占4字节的发送和接收FIFO
接收FIFO
19
SPI通信的结束
有发送操作的通信
等待发送FIFO为空 @FTLVL=00 等待最后一个数据发送完成 @BSY=0 读取所有收到的数据,直到接收FIFO为空 @FRLVL=00 关闭SPI @SPE=0
只有接收操作的通信
在特殊时间窗口内关闭只接收模式 @RXONLY=0或 BIDIOE=1 等待最后一个数据传输结束 @BSY=0 读取所有收到的数据,直到接收FIFO为空 @FRLVL=00 关闭SPI @SPE=0
23
CRC的使用注意事项
两个CRC计算单元,CRC8和CRC16。其他长度的数据帧,CRC不可用 CRC计算模块的复位 置位CRCEN,复位TXCRCR和RXCRCR寄存器 关闭SPI 复位CRCEN 置位CRCEN 使能SPI CRC计算阶段之后再采样新数据,自动复位TXCRCR和RXCRCR寄存器 适用于DMA循环模式 从设备使用CRC需注意(同F2)
尾巴数据
奇数个小数据帧组成的序列中最后一个数据帧的处理 发送:最后一次以8位写访问操作SPI_DR即可 接收:最后一次16位读操作后(当FRLVL=01时),把接收 FIFO门限设置成1个字节(FRXTH=1),以产生最后一次 RxNE DMA方式的处理,参见DMA Slide
பைடு நூலகம்17
2
SPI功能框图
(SD) (MCLK)
(CK) (WS)
3
Motorola模式下的数据帧格式
数据帧长度可设置:4位~16位
无论帧长度如何,对FIFO的读访问宽度必须和接收FIFO门限 FRXTH的设置一致(8位或16位) 数据帧总是以右对齐方式存放在SPI_DR[15:0]
时钟极性、相位可配置
SCK必须通过上拉或下拉电阻来使得空闲时电平和CPOL设置的一 样
数据位序可设置:MSB或LSB
数据开始出现
4
片选信号NSS管理(1)
从设备
从设备的身份由MSTR@CR1=0决定 是否被选中来和主设备通信,由输入的片选电平决定
硬件管理:由NSS引脚电平决定,低电平表示被选中 软件管理:由SSI位决定,0表示被选中;NSS引脚可做它用
至少需要3条线:MISO、MOSI和SCK(NSS可选)
MISO
Up to 16-bit shift register
MISO
Up to 16-bit shift register
MOSI
MOSI
Clock generator
SCK
SCK
NSS
NSS
Master
Slave
片选信号配置为输入&硬件管理
1
SPI特性(2)
新增以下特性
更加灵活的片选信号NSS控制
NSS脉冲模式 TI模式
数据帧长度可配置:4位~16位 能分别触发DMA请求,各占4字节的发送FIFO和接收FIFO
数据pack:如果数据帧长度短于一个字节,可以通过单次读写操 作来对FIFO中的2个数据帧进行访问
DS=0011,4位
实际传递2个4位数据(8个时钟脉冲)
18
SPI通信过程的开始和维持
主设备
发送使能时:由主设备提供连续的时钟,直到发送 FIFO为空且移位寄存器也为空;时钟的节奏由主设备 控制 只有接收时:一旦使能了SPI和只接收模式,时钟就由 主设备送出,时钟节奏不再受主设备控制;直到SPI或 只接收模式被关闭
5
片选信号NSS管理(2)
主设备
主设备的身份由MSTR=1决定 NSS做输入
无论软件还是硬件管理,信号都要为高电平;否则引发冲突 产生模式错误,置位MODF标志
NSS做输出:SSOE=1
只能是硬件管理 一旦主SPI使能,NSS信号就被拉低,直到SPI被禁止 如果使能了NSS脉冲模式,连续通信的每帧之间会有个脉冲
门限值设置@FRXTH:达到8位或16位就触发RxNE
RxNE事件 读取SPI_DR 对SPI_DR读取的宽度要和FRXTH一致 RxNE标志复位,表明接收FIFO为空了
FIFO当前的水平可通过FRLVL[1:0]查看
最多可储存4字节收到的数据
发送FIFO
门限值固定:包含的数据≤2个字节就触发TxE
单工 一条数据线
单线&单向 BIDIMODE=0
只接收 RXONLY=1
12
标准的多个从设备通信
从设备各自有独立的片选 任何时刻只有被NSS选中的从设备 可以和主设备做全双工通信 从设备共享同一片选 单工只接收的从设备们可同时收 到来自主设备的数据;其MISO引 脚不能参与通信 由于从设备的MISO都连在一起, 因此要配置成AF-OD以保护
20
SPI的DMA操作
DMA发送和接收请求
各自的使能控制 @TXDMAEN/RXDMAEN
各自请求可以分别使能 只使能了DMA发送通道时,发送过程中OVR会被置位
各自的触发条件 @TxE/RxNE置位
使用DMA传输&数据pack时
DMA发送/接收通道的PSIZE=16位 数据帧长度不超过1个字节 对尾巴数据的处理
SCK电平稳定后才能使能CRC,否则即使此时SPI还未使能,也会造成之后CRC 计算的错误 NSS pin needs to be kept low between data phase and CRC phase Vs. CRC calculation takes place even if a high level on NSS pin
DMA管理通信过程
自动完成对CRC的发送和接收,软件无需操作CRCNEXT DMA发送通道:CNDTR = 数据帧个数(或其一半) DMA接收通道:CNDTR =数据帧个数(或其一半) + 1(或2)
收到的CRC值放在memory中 通过DMA读取接收FIFO中的CRC值,复位RxNE
22
使用SPI的CRC
CPU管理通信过程
发送:把最后一个数据写进SPI_DR后软件置位CRCNEXT ,来把TXCRCR的值放入发送FIFO 只收模式:收到倒数第二个数据后软件置位CRCNEXT,表 示最后一个收到的数据要和SPI_RXCRCR的值进行比较 收到的CRC放在接收FIFO中,需要通过读取SPI_DR来复位 RxNE标志
主设备只接收:一旦使能SPI,时钟就发送出去,直到 RXONLY或SPE被复位
!
MISO
MISO
Up to 16-bit shift register
Up to 16-bit shift register
MOSI
MOSI
Clock generator
SCK
SCK
NSS
NSS
Master
Slave
NSS NSS
片选信号软件管理
9
通信模式:单工
只发送或只接收 至少需要2根线(时钟线SCK + 数据线),NSS可选
主发送/从接收:MOSI,MISO可做GPIO或其他用途 主接收/从发送:MISO,MOSI可做GPIO或其他用途
只发送,OVF置位无需理会 只接收,设置RXONLY=1
只提供CRC8和CRC16 @CRCL
当对8位数据帧进行16位CRC计算时,CRC值在总线上的传输 占用2个数据帧时间
可编程的CRC奇数多项式 @CRCPR
在由CPHA和CPOL定义的采样时钟沿,对每个数据位进行计 算
CRC值被最后一个传输
通信结束后自动对收到的CRC值进行校验 不匹配时置位CRCERR标志,并可产生中断
MISO
Up to 16-bit shift register
MOSI
MOSI
Clock generator
SCK
SCK
NSS
NSS
Master
Slave
11
通信模式小结
全双工 两条数据线,收发同时进行
原来的输出线作为唯一的数据线 >> 主设备:使用MOSI 单线&双向分时 >>从设备:使用MISO BIDIMODE=1 由BIDIOE控制数据方向 >> BIDIOE=1:输出 >> BIDIOE=0:输入 只发送 和全双工类似,只是接收引脚可以作GPIO 发送引脚可作它用 启动通信:配置并使能SPI(对于主设备无须发 送数据,时钟信号会自动送出) * 关闭通信: >> 主设备:清零SPE >> 从设备:片选无效或SCK停止
TxE事件 写SPI_DR TxE标志复位,表示发送FIFO为满
FIFO当前的水平可通过FTLVL[1:0]查看
如果帧长度≤8,最多可储存3字节待发送的数据
15
接收和发送FIFO图示
两个单独的32位FIFOs, 各自用于发送和接收 对FIFO的访问宽度:8位 或16位 FIFO当前位置的标志: FTLVL[1:0], FRLVL[1:0], TxE, RxNE 不超过8位长度的数据帧时 ,发送和接收FIFO各自不 同的容量
10
通信模式:半双工
发送和接收通过一个双向数据线分时进行 至少2个线,NSS可选
时钟线:SCK 数据线:主设备的MOSI接从设备的MISO
半双工的使能:BIDIMODE=1
当前的通信方向由BIDIOE决定 方向的改变,需要关闭SPI后再重新配置
MISO
Up to 16-bit shift register
6
新增的片选脉冲模式
脉冲模式使能:NSSP=1 只能用于标准SPI且第一时钟沿采样的主设备
片选信号的输出由硬件管理 连续通信时,每个数据帧之间NSS拉高一个时钟周期 单数据帧通信时,数据传输完成后NSS被拉到高电平 该片选信号输出常用于从设备的锁存数据
tSCK
7
新增的TI片选模式
数据自动pack
软件要在使能SPI之前置位LDMA_TX/LDMA_RX来表明要发送 /接收的小数据帧个数是奇数
21
SPI的CRC计算单元特性
SPI提供硬件CRC计算单元,在保持通信可靠性的 同事,降低系统开销
发送、接收有各自的CRC计算单元 统一的使能控制 @CRCEN
必需在使能SPI之前置位
通信外设
SPI特性(1)
3线全双工同步传输 2线半双工/单工同步传输 时钟极性、相位以及数据位序(MSB或LSB)可设置 支持主设备、从设备,以及多主模式 片选信号的软、硬件管理
硬件CRC(用于8位或16位长度的帧)
能触发中断的标志(TxE、RxNE、MODF、OVR、CRCERR、FRE) 可配置的时钟速度fPCLK/2,高达18MHz BSY标志用于检查当前总线上是否有数据在传输 自动发送CRC的DMA传输(独立的发送、接收请求)
TI模式使能:FRF=1 片选信号在最后一个数据位时拉高
片选和时钟信号都由硬件管理,CPHA和CPOL无效 该模式下SSM、SSI、SSOE、NSSP都无效 主、从设备都可以使用该模式
主设备的BR决定总线波特率 从设备的BR决定SO输出高阻的保持时间
8
通信模式:全双工
同时发送和接收数据
16
FIFO带来的数据pack
当数据帧长度不超过1个字节,可通过对SPI_DR的单 次16位读写操作同时访问处理2个数据帧
先访问处理LSB字节的数据帧,再MSB字节的数据帧 只传输有效位,2*DS个时钟脉冲
用途
数据帧较小,通信速度较快,数据pack可降低RxNE和TxE 事件的频率,提高系统性能
数据pack的使用图例
数据帧长度=4,数据位序=MSB,接收FIFO门限=2字节
对SPI_DR的一次16位写操作:0x040A 通过8个时钟脉冲依次发送2个数据:0x0A 0x04 2个数据帧收到FIFO后,触发一次RxNE事件,对SPI_DR的一次16 位读操作,从MSB和LSB字节分别获得两个数据帧的内容
关闭操作要在一个时间窗内完成:最后一个数据的第一个位的 采样时间之后,下一个数据开始传输之前
从设备
被动在时钟到来接收数据或发送数据;因此必须在主设 备送出时钟信号之前做好接收的准备,并且把要发送的 数据事先放好在发送FIFO中;主设备要给从设备足够 的时间做这些准备工作以及对收到的数据处理。
13
多个从设备组成菊花链
数据线连成一个闭合的回路
主设备提供时钟把数据在各 个从设备之间移动 每组时钟脉冲之间主设备要 留给从设备足够的时间来把 收到的数据拷贝到发送寄存 器中 只需要一个共用的片选信号 ;时钟信号和片选信号都连 在一起
14
各占4字节的发送和接收FIFO
接收FIFO
19
SPI通信的结束
有发送操作的通信
等待发送FIFO为空 @FTLVL=00 等待最后一个数据发送完成 @BSY=0 读取所有收到的数据,直到接收FIFO为空 @FRLVL=00 关闭SPI @SPE=0
只有接收操作的通信
在特殊时间窗口内关闭只接收模式 @RXONLY=0或 BIDIOE=1 等待最后一个数据传输结束 @BSY=0 读取所有收到的数据,直到接收FIFO为空 @FRLVL=00 关闭SPI @SPE=0
23
CRC的使用注意事项
两个CRC计算单元,CRC8和CRC16。其他长度的数据帧,CRC不可用 CRC计算模块的复位 置位CRCEN,复位TXCRCR和RXCRCR寄存器 关闭SPI 复位CRCEN 置位CRCEN 使能SPI CRC计算阶段之后再采样新数据,自动复位TXCRCR和RXCRCR寄存器 适用于DMA循环模式 从设备使用CRC需注意(同F2)
尾巴数据
奇数个小数据帧组成的序列中最后一个数据帧的处理 发送:最后一次以8位写访问操作SPI_DR即可 接收:最后一次16位读操作后(当FRLVL=01时),把接收 FIFO门限设置成1个字节(FRXTH=1),以产生最后一次 RxNE DMA方式的处理,参见DMA Slide
பைடு நூலகம்17
2
SPI功能框图
(SD) (MCLK)
(CK) (WS)
3
Motorola模式下的数据帧格式
数据帧长度可设置:4位~16位
无论帧长度如何,对FIFO的读访问宽度必须和接收FIFO门限 FRXTH的设置一致(8位或16位) 数据帧总是以右对齐方式存放在SPI_DR[15:0]
时钟极性、相位可配置
SCK必须通过上拉或下拉电阻来使得空闲时电平和CPOL设置的一 样
数据位序可设置:MSB或LSB
数据开始出现
4
片选信号NSS管理(1)
从设备
从设备的身份由MSTR@CR1=0决定 是否被选中来和主设备通信,由输入的片选电平决定
硬件管理:由NSS引脚电平决定,低电平表示被选中 软件管理:由SSI位决定,0表示被选中;NSS引脚可做它用
至少需要3条线:MISO、MOSI和SCK(NSS可选)
MISO
Up to 16-bit shift register
MISO
Up to 16-bit shift register
MOSI
MOSI
Clock generator
SCK
SCK
NSS
NSS
Master
Slave
片选信号配置为输入&硬件管理
1
SPI特性(2)
新增以下特性
更加灵活的片选信号NSS控制
NSS脉冲模式 TI模式
数据帧长度可配置:4位~16位 能分别触发DMA请求,各占4字节的发送FIFO和接收FIFO
数据pack:如果数据帧长度短于一个字节,可以通过单次读写操 作来对FIFO中的2个数据帧进行访问
DS=0011,4位
实际传递2个4位数据(8个时钟脉冲)
18
SPI通信过程的开始和维持
主设备
发送使能时:由主设备提供连续的时钟,直到发送 FIFO为空且移位寄存器也为空;时钟的节奏由主设备 控制 只有接收时:一旦使能了SPI和只接收模式,时钟就由 主设备送出,时钟节奏不再受主设备控制;直到SPI或 只接收模式被关闭
5
片选信号NSS管理(2)
主设备
主设备的身份由MSTR=1决定 NSS做输入
无论软件还是硬件管理,信号都要为高电平;否则引发冲突 产生模式错误,置位MODF标志
NSS做输出:SSOE=1
只能是硬件管理 一旦主SPI使能,NSS信号就被拉低,直到SPI被禁止 如果使能了NSS脉冲模式,连续通信的每帧之间会有个脉冲
门限值设置@FRXTH:达到8位或16位就触发RxNE
RxNE事件 读取SPI_DR 对SPI_DR读取的宽度要和FRXTH一致 RxNE标志复位,表明接收FIFO为空了
FIFO当前的水平可通过FRLVL[1:0]查看
最多可储存4字节收到的数据
发送FIFO
门限值固定:包含的数据≤2个字节就触发TxE
单工 一条数据线
单线&单向 BIDIMODE=0
只接收 RXONLY=1
12
标准的多个从设备通信
从设备各自有独立的片选 任何时刻只有被NSS选中的从设备 可以和主设备做全双工通信 从设备共享同一片选 单工只接收的从设备们可同时收 到来自主设备的数据;其MISO引 脚不能参与通信 由于从设备的MISO都连在一起, 因此要配置成AF-OD以保护
20
SPI的DMA操作
DMA发送和接收请求
各自的使能控制 @TXDMAEN/RXDMAEN
各自请求可以分别使能 只使能了DMA发送通道时,发送过程中OVR会被置位
各自的触发条件 @TxE/RxNE置位
使用DMA传输&数据pack时
DMA发送/接收通道的PSIZE=16位 数据帧长度不超过1个字节 对尾巴数据的处理
SCK电平稳定后才能使能CRC,否则即使此时SPI还未使能,也会造成之后CRC 计算的错误 NSS pin needs to be kept low between data phase and CRC phase Vs. CRC calculation takes place even if a high level on NSS pin
DMA管理通信过程
自动完成对CRC的发送和接收,软件无需操作CRCNEXT DMA发送通道:CNDTR = 数据帧个数(或其一半) DMA接收通道:CNDTR =数据帧个数(或其一半) + 1(或2)
收到的CRC值放在memory中 通过DMA读取接收FIFO中的CRC值,复位RxNE
22
使用SPI的CRC
CPU管理通信过程
发送:把最后一个数据写进SPI_DR后软件置位CRCNEXT ,来把TXCRCR的值放入发送FIFO 只收模式:收到倒数第二个数据后软件置位CRCNEXT,表 示最后一个收到的数据要和SPI_RXCRCR的值进行比较 收到的CRC放在接收FIFO中,需要通过读取SPI_DR来复位 RxNE标志
主设备只接收:一旦使能SPI,时钟就发送出去,直到 RXONLY或SPE被复位
!
MISO
MISO
Up to 16-bit shift register
Up to 16-bit shift register
MOSI
MOSI
Clock generator
SCK
SCK
NSS
NSS
Master
Slave
NSS NSS
片选信号软件管理
9
通信模式:单工
只发送或只接收 至少需要2根线(时钟线SCK + 数据线),NSS可选
主发送/从接收:MOSI,MISO可做GPIO或其他用途 主接收/从发送:MISO,MOSI可做GPIO或其他用途
只发送,OVF置位无需理会 只接收,设置RXONLY=1
只提供CRC8和CRC16 @CRCL
当对8位数据帧进行16位CRC计算时,CRC值在总线上的传输 占用2个数据帧时间
可编程的CRC奇数多项式 @CRCPR
在由CPHA和CPOL定义的采样时钟沿,对每个数据位进行计 算
CRC值被最后一个传输
通信结束后自动对收到的CRC值进行校验 不匹配时置位CRCERR标志,并可产生中断
MISO
Up to 16-bit shift register
MOSI
MOSI
Clock generator
SCK
SCK
NSS
NSS
Master
Slave
11
通信模式小结
全双工 两条数据线,收发同时进行
原来的输出线作为唯一的数据线 >> 主设备:使用MOSI 单线&双向分时 >>从设备:使用MISO BIDIMODE=1 由BIDIOE控制数据方向 >> BIDIOE=1:输出 >> BIDIOE=0:输入 只发送 和全双工类似,只是接收引脚可以作GPIO 发送引脚可作它用 启动通信:配置并使能SPI(对于主设备无须发 送数据,时钟信号会自动送出) * 关闭通信: >> 主设备:清零SPE >> 从设备:片选无效或SCK停止
TxE事件 写SPI_DR TxE标志复位,表示发送FIFO为满
FIFO当前的水平可通过FTLVL[1:0]查看
如果帧长度≤8,最多可储存3字节待发送的数据
15
接收和发送FIFO图示
两个单独的32位FIFOs, 各自用于发送和接收 对FIFO的访问宽度:8位 或16位 FIFO当前位置的标志: FTLVL[1:0], FRLVL[1:0], TxE, RxNE 不超过8位长度的数据帧时 ,发送和接收FIFO各自不 同的容量
10
通信模式:半双工
发送和接收通过一个双向数据线分时进行 至少2个线,NSS可选
时钟线:SCK 数据线:主设备的MOSI接从设备的MISO
半双工的使能:BIDIMODE=1
当前的通信方向由BIDIOE决定 方向的改变,需要关闭SPI后再重新配置
MISO
Up to 16-bit shift register
6
新增的片选脉冲模式
脉冲模式使能:NSSP=1 只能用于标准SPI且第一时钟沿采样的主设备
片选信号的输出由硬件管理 连续通信时,每个数据帧之间NSS拉高一个时钟周期 单数据帧通信时,数据传输完成后NSS被拉到高电平 该片选信号输出常用于从设备的锁存数据
tSCK
7
新增的TI片选模式
数据自动pack
软件要在使能SPI之前置位LDMA_TX/LDMA_RX来表明要发送 /接收的小数据帧个数是奇数
21
SPI的CRC计算单元特性
SPI提供硬件CRC计算单元,在保持通信可靠性的 同事,降低系统开销
发送、接收有各自的CRC计算单元 统一的使能控制 @CRCEN
必需在使能SPI之前置位