硬件spi

stm32外设简介

1.stm32内部集成了硬件spi的收发电路,可以由硬件自动执行时钟生成数据手法等功能,减轻cpu的负担

2.可配置8位/16位数据帧,高位先行/低位先行

3.时钟频率:Fpclk/(2,4,8,16,32,64,128,256)

4.支持多主机模型,主或从操作

5.可精简为半双工/单工通信

6.支持DMA

7.兼容I2S协议(飞利浦公司开发的一套音频通讯协议)

STM32f103支持硬件spi有SPI1,SPI2。

复用引脚(spi1,spi2)

SPI框图

下面将此图分为各个部分进行介绍

1.数据传输部分(移位寄存器会自动产生时钟并且与波特率发生器输入到SCK上的时钟相同)

1.图中的控制位LSBFIRST是控制低位先行还是高位先行,图中数据传输的方式是低位先行。

高电平低位先行,低电平高位先行。

 

2.里面发生了交叉,意味着stm32既可以作为主机又可以作为从机,当STM32作为主机时没有其中的交叉,当STM32作为从机的时候框内的交叉存在(此时MOSI的数据输出到移位寄存器中,移位寄存器的数据到MISO上)。

3.缓冲区(接受缓冲区RDR,发送缓冲区TDR)

接受缓冲区是接受数据寄存器RDR

发送缓冲区是发送数据寄存器TDR

其中TDR与RDR占用同一个地址,统一叫做DR

4.总结:数据传输方向(实现连续的数据流)

数据沿着地址总线写入到TDR上,若移位寄存器中的数据为空,

{则数据从TDR移入移位寄存器(此时转入时刻置内部状态寄存器的TXE为1,表示发送寄存器为空,当我们检测到发送寄存器TDR为空时,总线上的数据自动转入到TDR上等候)}

{移位寄存器上如果检测到数据到达,会自动产生时钟,与从机进行数据交换}

{移位寄存器在与从机进行数据交换,交换完成的数据通过移位寄存器整体移入到RDR(此时状态寄存器的RXNE为1表示接受寄存器非空)中再传输到地址总线上。此时我们要及时将数据从RDR上读出来当下一个数据被接收到了,RDR上的数据就会被覆盖}

2.控制逻辑部分

1.波特率发生器用来产生SCK时钟频率与移位寄存器的时钟相同,其内部主要是一个分频器,
输入时钟是PCLK(72MHZ,36MHZ)经过分频器之后数据被传输到SCK引脚上。所以每产生一个时钟移入移出一个bit。
2.其中SPI_CR1寄存器内部BR2,BR1,BR0三个位控制分频系数。所以最高分频为256分频。

3.寄存器每个位介绍

第一位控制高位先行1 还是低位先行0 

第二位是控制SPI使能为意为SPI_Cmd(SPI1,ENABLE);

第三四五位请参考那个第二个小点

第MSTR位是决定stm32是做主机还是从机,在I2S模式下不启用。

第CPOL位和CPHA位结合来控制SPI的通信模式。

CPOL位时钟极性,决定SCK在空闲状态下的电平。0低电平,1高电平。

CPHA位决定数据采样从第几个时钟边沿开始。0第一个,1第二个。

4.多主机模式的实现

啥意思呢?NSS引脚就是将各个设备主从设备控制引脚,怎么说呢!当某个设备的NSS输出低电平时该设备作为主机。

SSM:当SSM被置为高电平时允许SSI控制NSS上的电平(低电平为主机,高电平为从机),STM32内部从设备选择是将STM32作为从机。

SPI简化框图(主干部分)

这里寄存器讲解就到这,主要还是手册上的

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值