SPI

涉及寄存器:
“控制寄存器CR1”:SPI 模式、波特率、LSB先行、主从模式、单双向模式、数据帧长度等等
控制时钟信号、CPOL位(时钟极性:0空闲SCL为低,1空闲SCL为高)、CPHA位(时钟相位:0第一个边沿采 集信号,1第二个边沿采集信号)。
“状态寄存器(SR)”:读取状态寄存器相关寄存器位,就可以了解SPI的工作状态了。如发送完一帧数据的时候,“状态寄存器SR”中的“TXE标志位”会被置 1 ,表示传输完一帧,类似当接收完一帧的时候,“RXNE标志位”会被置 1 ,表示传输完一帧。
MOSI和MISO都连接到数据移位寄存器上,通过写SPI的“数据寄存器DR”把数据填充到发送F缓冲区中,通讯读“数据寄存器DR”可以获取接受缓冲区的内容。其中数据帧长度可以通过“控制寄存器CR1”的“DFF”位配置成8位及16位模式;配置“LSBFIRST位”可选择MSB先行(高位数据在前)还是LSB先行(低位数据在前)。

SPI:串行外围设备接口
高速、全双工、同步的通信总线。
在芯片的管教上占四根线。
硬件连接:
在这里插入图片描述

四根线:

  1. SDO -主设备数据输出,从设备数据输入 对应MOSI(master output slave input)
  2. SDI -主设备数据输入,从设备数据输入 对应MISO(master input slave output)
  3. SCLK -时钟信号,由主设备产生
  4. CS -从设备使能信号,由主设备控制
    CS:其中CS是控制芯片是否被选中,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片才有效,这就允许在同一总线上连接多个SPI设备成为可能。
    SDI/SDO/SCLK:数据是一位一位的传输。数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,再紧接着的下降沿或上升沿被读取。完成一位数据传输,输入同样道理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。

注意:SCK信号线只由主设备控制,从设备不能控制信号线。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个设备的系统中,每个从设备需要独立的是使能信号,硬件上比IIC系统要复杂。
SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。

时序是在SCK的控制下,两个双向移位寄存器进行数据交换。

上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,SDO上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,SDI上的电平将被接收到主设备的寄存器中。

模式:SPI有四种模式(需要根据从设备的模式进行配置主设备SPI模式)

  1. Mode0: CPOL=0, CPHA=0
  2. Mode1: CPOL=0, CPHA=1
  3. Mode2: CPOL=1, CPHA=0
  4. Mode3: CPOL=1, CPHA=1
    时钟极性CPOL用来配置SCLK的电平处于哪种状态是空闲态或有效态。时钟相位CPHA是用来配置数据采样是在第几个边沿。
/*addy by wbf*/
void SPI_INIT2(SPI_TypeDef* SPIx)
{
   
    if((SPIx==SPI1)||(SPIx==SPI3))
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值