STM32实现SPI通信1

目录

SPI的结构框图

STM32的SPI模块

从选择NSS管理

软件NSS

硬件NSS

时钟信号的相位与极性

数据帧格式

状态标志

SPI中断

STM32F103RCT6的SPI1引脚

SPI模块引脚配置的GPIO模式

SPI的常用寄存器

STM32的SPI相关固件函数

SPI_I2S_DeInit

 SPI_Init

SPI_Cmd ​

SPI_I2S_ITConfig

SPI_I2S_DMACmd

​SPI_I2S_SendData

​SPI_I2S_ReceiveData

 SPI_DataSizeConfig

 SPI_I2S_GetFlagStatus

​ SPI_I2S_ClearFlag

 SPI_I2S_GetITStatus

 SPI_I2S_ClearITPendingBit


SPI

Serial Peripheral Interface

串行外围设备接口

是一种告诉,全双工,同步的通信总线

  • MISO
  • MOSI
  • SCL
  • CS

SPI的结构框图

8个时钟周期,主机和从机移位寄存器中的数据完全交换

  • 硬件上通过4根线连接
  • 主机和从机都有一个串行移位寄存器,主机通过向自己的SPI串行寄存器写入一个字节来发起一次传输
  • 串行寄存器通过MOSI将主机数据传输给从机,同时从机也将自己的串行移位寄存器数据通过MISO传给主机,两个串行移位寄存器中的内容进行交换
  • 外设的读写操作同时完成。若写操作,只需要忽略收到的字节,若读操作,则主机发送8位空字节即可

STM32的SPI模块

  • 3线全双工同步传输
  • 8位或16位帧格式
  • 主或从
  • 可编程的时钟极性和相位
  • 主机和从机均可通过硬件进行NSS管理
  • 可编程的数据顺序,MSB在前或LSB在前
  • 可触发中断的专用发送和接收标志

从选择NSS管理

两种NSS模式:

  • 软件NSS
  • 硬件NSS

软件NSS

通过设置SPI_CR1寄存器的SSM位来使能这种模式

这种模式下NSS引脚可以另作他用。内部的NSS电平可以通过SPI_CR1寄存器进行驱动

硬件NSS

若NSS输出被使能,此时STM32工作为主SPI,并且NSS输出已经通过SPI_CR2寄存器的SSOE位使能,此时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成SPI设备

若一个SPI设备需要发送广播数据,它必须拉低NSS信号,从而通知其他所有的设备,它是主设备;如果它不能拉低NSS,这意味着总线上有另外一个主设备在通信,这是将产生Hard Fault

若NSS输出被关闭,允许操作于多主环境

时钟信号的相位与极性

通过SPI_CR寄存器的CPOL和CPHA位进行控制

共有4种可能性

CPOL即时钟极性,控制在没有数据传输时的是中能够空闲状态电平,对于主模式和从模式下的设备都是有效的

  • CPOL为0,表示SCK在空闲时为低电平
  • CPOL为1,表示SCK在空闲时为高电平

CPHA即数据在上升沿还是下降沿被采集

  • CPHA为0,表示数据在下降沿被采集
  • CPHA为1,表示数据在上升沿被采集

 

使用时,根据对应芯片的Datasheet选择时钟的相位和极性

数据帧格式

由SPI_CR1寄存器的LSBFIRST位进行配置

输出数据可以MSB或LSB

由SPI_CR1寄存器的DFF位可以配置数据帧为8位或16位

状态标志

3个状态标志

  • 发送缓冲器空闲标志TXE
  • 接收缓冲器非空RXNE
  • 忙标志Busy

SPI中断

STM32F103RCT6的SPI1引脚

SPI模块引脚配置的GPIO模式

SPI的常用寄存器

  • SPI控制寄存器1 SPI_CR1

  • SPI控制寄存器2 SPI_CR2

  • SPI状态寄存器 SPI_SR

  • SPI数据寄存器 SPI_DR

  • SPI_I2S配置寄存器 SPI_I2S_CFGR

  • SPI_I2S预分频寄存器 SPI_I2SPR

注意:STM32的SPI接口可以配置为支持SPI协议或支持I2S音频协议,默认是SPI模式,可以通过软件切换到I2S模式

STM32的SPI相关固件函数

SPI_I2S_DeInit

 SPI_Init

SPI_Cmd 

SPI_I2S_ITConfig

SPI_I2S_DMACmd

SPI_I2S_SendData

SPI_I2S_ReceiveData

 SPI_DataSizeConfig

 SPI_I2S_GetFlagStatus

 SPI_I2S_ClearFlag

 SPI_I2S_GetITStatus

 SPI_I2S_ClearITPendingBit

 

 

版权声明:本文为CSDN博主「CodeForCoffee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24118527/article/details/122760005

生成海报
点赞 0

CodeForCoffee

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STM32F1系列的ADC配置

目录 ADC引脚 注入通道与规则通道 1. 注入通道 2. 规则通道 ​ADC时钟 ADC的触发事件 ​ ADC的运行模式 1. 单次转换模式 2. 连续转换模式 3. 扫描模式  ADC的中断 ADC的时钟 RCC

STM32实现软件I2C通信

目录 I2C协议 1. 空闲状态 2. 开始信号 3. 停止信号 4. 应答信号ACK 5. 数据的有效性 6. 数据传输 I2C的实现 IIC_Init II2_START​ IIC_Stop​ IIC_Wait_Ack​

STM32F2————配置时钟延迟不准的问题

STM32F2配置时钟问题 笔者在本科毕业设计使用STM32F207芯片,但是在配置时钟时出现了问题。 问题 我按照F1写代码的延时函数放在F2竟然不准了 换个办法 使用Systick时钟也是不准,原因是笔者代