STMCU小助手
发布时间:2022-3-27 17:00
|
01. SPI简介% @. H2 n/ F6 H- l$ @+ D- v+ R SPI 接口提供两个主要功能,支持 SPI 协议或 I 2 S 音频协议。默认情况下,选择的是 SPI 功能。可通过软件将接口从 SPI 切换到 I2S。3 [7 D! {: P1 \2 p% i( @$ n& T! x * t K# H# y! M. m" g$ L 串行外设接口 (SPI) 可与外部器件进行半双工/全双工的同步串行通信。该接口可配置为主模式,在这种情况下,它可为外部从器件提供通信时钟 (SCK)。该接口还能够在多主模式配置下工作。 它可用于多种用途,包括基于双线的单工同步传输,其中一条可作为双向数据线,或使用CRC 校验实现可靠通信。% r+ R& z j- K 9 Z* [& u" E4 O' l! t I2S 也是同步串行通信接口。它可满足四种不同音频标准的要求,包括 I 2 S Philips 标准、MSB 和 LSB 对齐标准,以及 PCM 标准。它可在全双工模式(使用 4 引脚)或半双工模式(使用 3 个引脚)下作为从器件或主器件工作。当 I 2 S 配置为通信主模式时,该接口可以向 外部从器件提供主时钟。2 s: V0 n& [. E& j6 ~/ P, f; } 8 y9 l3 a$ k5 W3 w" R2 D1 p9 f 02. SPI特性% O+ P9 A. L4 y1 Z# T ● 基于三条线的全双工同步传输 ● 基于双线的单工同步传输,其中一条可作为双向数据线) Z9 R2 y! x2 o* A; W0 ?+ H ● 8 位或 16 位传输帧格式选择 ● 主模式或从模式操作" `7 U& X o. @. V& B+ T& { ● 多主模式功能 ● 8 个主模式波特率预分频器(最大值为 f PCLK /2)2 i( x2 A7 F, H/ M ● 从模式频率(最大值为 f PCLK /2)! k. V; W% ]& l; M ● 对于主模式和从模式都可实现更快的通信 ● 对于主模式和从模式都可通过硬件或软件进行 NSS 管理:动态切换主/从操作 ● 可编程的时钟极性和相位 ● 可编程的数据顺序,最先移位 MSB 或 LSB! c2 Y& O; m8 J) s ● 可触发中断的专用发送和接收标志 ● SPI 总线忙状态标志 ● SPI TI 模式 ● 用于确保可靠通信的硬件 CRC 功能:/ ^, _: e) p. |3 P — 在发送模式下可将 CRC 值作为最后一个字节发送0 M0 t0 t5 L7 i' _, ? — 根据收到的最后一个字节自动进行 CRC 错误校验 ● 可触发中断的主模式故障、上溢和 CRC 错误标志9 A; Y7 j) v; i- H( L& ?8 z& d ● 具有 DMA 功能的 1 字节发送和接收缓冲器:发送和接收请求2 Z$ V( i, i. M/ `- T; x& S 03. SPI功能说明& _$ u* N: t4 b7 q' x 7 L' U3 L8 h+ M. m2 ?
通常,SPI 通过 4 个引脚与外部器件连接:0 t* q# s% k8 ?: i4 N7 g$ K! b6 k3 | ● MISO:主输入/从输出数据。此引脚可用于在从模式下发送数据和在主模式下接收数据。 ● MOSI:主输出/从输入数据。此引脚可用于在主模式下发送数据和在从模式下接收数据。 ● SCK:用于 SPI 主器件的串行时钟输出以及 SPI 从器件的串行时钟输入。6 ]& a8 U p/ r ● NSS:从器件选择。这是用于选择从器件的可选引脚。此引脚用作“片选”,可让 SPI主器件与从器件进行单独通信,从而并避免数据线上的竞争。从器件的 NSS 输入可由主器件上的标准 IO 端口驱动。NSS 引脚在使能(SSOE 位)时还可用作输出,并可在SPI 处于主模式配置时驱动为低电平。通过这种方式,只要器件配置成 NSS 硬件管理模式,所有连接到该主器件 NSS 引脚的其它器件 NSS 引脚都将呈现低电平,并因此而作为从器件。当配置为主模式,且 NSS 配置为输入(MSTR=1 且 SSOE=0)时,如果NSS 拉至低电平,SPI 将进入主模式故障状态:MSTR 位自动清零,并且器件配置为从模式。; A& P+ g- K9 ` 04. SPI中断+ w! e8 h2 B- F4 k, \8 |, a : a) ~' u- j. b& q. q
: N3 H9 l' a6 ~/ P& E" D$ N: q 05. 相关寄存器! X8 g" V2 R g! Z6 t4 } 5.1 SPI 控制寄存器 1 (SPI_CR1) (不用于 I 2 S 模式)- U" t: H! n& D+ _' B( r SPI control register 1 偏移地址:0x00$ C5 ?. R' G9 a! L# P4 n# j 复位值:0x00007 v5 n. s# v0 t* h% a9 Y1 `
5.2 SPI 控制寄存器 2 (SPI_CR2) SPI control register 20 F j6 U# Z x8 H 偏移地址:0x04 复位值:0x0000 & E2 i/ U) X4 c2 `0 \1 K
' _: [+ V/ \1 a 5.3 SPI 状态寄存器 (SPI_SR)5 Z& m% Q6 |! l* H& x% B' Y' r SPI status register 偏移地址:0x08 复位值:0x00023 F, A" @: u: ]+ [8 U4 V4 A2 T; T 0 ]' d/ W8 g0 j) z' V! c& `
5.4 SPI 数据寄存器 (SPI_DR) SPI data register 偏移地址:0x0C 复位值:0x0000$ c+ l$ A, d6 e, b0 c) m
; r, m4 _1 q% A) E 5.5 SPI_I 2 S 配置寄存器 (SPI_I2SCFGR) y: A- R) O& _$ U8 H SPI_I 2 S configuration register 偏移地址:0x1C 复位值:0x0000/ W1 K* G$ l8 i4 U" Z ]
5.6 SPI_I 2 S 预分频器寄存器 (SPI_I2SPR) SPI_I 2 S prescaler register: j) l0 ]/ l. O" D$ j4 I( | 偏移地址:0x20, m6 f. T+ V& X5 J 复位值:0000 0010 (0x0002) - \ v, r/ T4 d* M+ w9 x . @/ ~. V. u5 E5 s( o |
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
SPI 32位宽DMA方式收发失败问题
SPI 高温读错最后一位?STM32F42xx 官方根治方案
经验分享 | LAT1470 SPI传输长度超过1024时出现异常的问题分析
经验分享 | 使用EXIT0同步触发SPI的DMA发送话题
经验分享 | STM32H723 SPI 通讯异常排查:实时观察窗口的 “隐形干扰” 解决方案
【STM32C0评测】4、驱动Lorasx126x,实现透传
经验分享 | STM32 SPI半工单线通信示例
经验分享 | 多个SPI的DMA传输为何仅1个有效?
经验分享 | STM32C0 HAL 库的 SPI 驱动导致的 Hardfault 问题分析
微信公众号
手机版