文章目录[隐藏]
目录
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
暂无评论