stm32入门-----硬件SPI外设

 目录

前言

一、SPI外设

1.基本概念

2.SPI结构

二、传输模式

1.连续传输

2.非连续传输

3.软硬件时序图 


前言

        本期我们就开始学习stm32本身的SPI外设,这是属于硬件自身的功能,在我们前面学习过的I2C中,stm32也是本身就有I2C外设的资源的。本期是介绍stm32中SPI外设的相关理论知识,下一期我们再进行关于硬件SPI的实践项目编程。(视频:[11-4] SPI通信外设_哔哩哔哩_bilibili

一、SPI外设

1.基本概念

  • STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担
  • 可配置8/16位数据帧、高位先行/低位先行
  • 时钟频率: fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)
  • 支持多主机模型、主或从操作
  • 可精简为半双工/单工通信
  • 支持DMA
  • 兼容I2S协议

  • STM32F103C8T6 硬件SPI资源:SPI1SPI2

 这里补充一下,对于stm32C8T6的两个SPI所对应的总线是不同的,SPI1是挂在APB2上,对应的时钟频率72MHz,SPI2挂载到APB1上,对应的时钟频率是36MHz。

2.SPI结构

        对于下面SPI的框图我们可以分两个部分来去看,先看到左上角这部分,这里有两个输入输出口分别是MISO和MOSI,其中这两个口中间是有交叉的,这是因为当stm32为从机的时候会走中间交叉部分的功能,也就是MISO变为输出口,MOSI变为输入口,反过来的,当然正常的话我们的stm32都是作为主机的,所以中间交叉的部分不用去看。

        另外一点就是看到旁边的移位寄存器这部分,在数据发送和接收的过程中,每次从右边移出一位数据到MOSI,然后MISO会从左边移入一位数据,数据整体是向右移动的,这不难看出是一种低位先行的。对于控制移位寄存器移位的方向(低位先行/高位先行)旁边有一个控制位来去控制的。还有就是当一个字节的数据发送完成之后,同时移位寄存器里面的数据也是接收完成了的数据,这时候会产生一个RXNE标志位表示数据接收完成,这时候移位寄存器的数据就会转移到接收缓冲器中,最后接收缓冲器的数据再转移到其他地方,如果不及时拿走,那下次的数据会直接覆盖掉原来接收缓冲器的数据。然后就是新的一轮置换数据的操作,这时候发送缓冲器就会把里面的数据转移到移位寄存器里面,然后会有一个TXE标志位告诉移位寄存器OK啦可以开始与从机置换数据了,发送缓冲器数据一但转移到了移位寄存器,就立马会有新的数据写入到发送缓冲区。

         然后我们看到另外一个主控电路的部分,也就是旁边这些指令操作的部分,这些就是我们要去配置的指令,到时候代码会去通过结构体的初始化来去配置的。波特率发生器是配置波特率的,也就是数据发送和接收的速度,一般是有总线的时钟分频后的频率。

结构功能简化图如下: 

这里我们可以去对比一下前面学过的I2C协议和USART传输协议的异同之处,SPI是属于同步全双工的传输协议,发送数据的同时也可以接收数据,这一点跟USART是一样的,USART也是有两条线独立进行发送和接收,所以我们可以看到SPI和USART的结果图很相似,都是接收和发送的数据寄存器独立分开的,不同的就是SPI接收和发送数据都是使用同一个移位寄存器;对于半双工的I2C协议,这是只能单独执行发送或者接收,所以其发送和接收的数据寄存器是都是一起的,只有一个数据寄存器,同样移位寄存器也是只有一个。

二、传输模式

1.连续传输

对于连续传输的是中间没有间隙的传输方式,这种是当完成一个字节的置换后立马就进行下一个字节的置换操作,一气呵成,不过连续传输的模式相对复杂,对配置要求比较高,如果有高速率传输这方面需要的话才会去使用到连续传输模式。下图展示的是模式3的SPI连续传输模式的过程。

2.非连续传输

非连续传输就是每次置换完了一个字节之后,中间就会有一个间隔时间,这种非连续模式传输一般情况是对于传输速率比较低的时候使用的,我们主要是用到非连续传输来作为示例来写代码,步骤也是相对比较简单。下图展示的是模式3的SPI非连续传输的过程时序。

3.软硬件时序图 

软件SPI时序 

硬件SPI时序

 对比上面两个时序我们可以看出,软件的SPI时序图在置换数据的过程是稍微滞后SCK的,也就是相较于硬件没有去紧贴SCK边沿触发,这方面我们也是在前面提到过,软件本身就是通过软件本身来去设置来去交换数据,软件本身代码执行是有一定的先后顺序的,所以相较于硬件来说效果肯定是没硬件自动执行的效果要好的。

以上就是本期的全部内容了,我们下次见!

今日壁纸:

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fitz&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值