学习笔记——SPI通信

一、原理

1、SPI介绍

        1、SPISerial Peripheral Interface)是由Motorola公司开发的一种同步,全双工的通用数据总线。

        2、四根通信线:SCK(Serial Clock)、MOSIMaster Output Slave Input)、MISOMaster Input Slave Output)、SSSlave Select

        3、支持总线挂载多设备(一主多从)。SPI通信线比较多,开销大。且SPI在通信中造成的资源浪费比较多。

2、硬件电路

         所有设备必须供地。SCK完全由主机掌控。主机通过将各个SS线置低电平来选择从机地址,SS先有且只有一根线被置低。规定:当从机的SS引脚为高电平时,从机的MISO引脚必须为高阻态。

3、SPI原理——移位示意图

         在SPI通信时,主机与从机要将交换的数据放到移位寄存器中。时钟由主机中的波特率发生器控制。

         在一个时钟边沿跳变时,主机和从机都会输出,主机将要发送的数据的最高位放到通信线(输出数据寄存器)上。

         在下一个时钟边沿跳变时,主机和从机都会采样输入,主机和从机一起把线上的数据存入移位寄存器的最低位。

4、SPI时序

        1、起始条件和终止条件

         2、交换字节

        由CPOL和COHA寄存器控制交换的模式。

        在常用的模式0中,空闲状态下SCL为低电平,当他第一个电平开始跳变的时候,主机和从机就要完成“读线”的操作。可在此之前“线”上并没有数据,因此其实在第一个上升沿之前,还有一个第0个跳变,在这个跳变中,主机和从机将数据放到“线”上。其他几个模式同理。

二、硬件SPI

1、SPI外设简介

 2、SPI框图

         接收缓冲区与发送缓冲区都用于接收和发送时数据的存储。当有数据要发出去时,先将高位数据放到发送缓冲区(TDR)中,然后检测到移位寄存器已经完成操作(检测TDRN标志位变化),将缓冲区数据放入移位寄存器中········发送和接收共用一个移位寄存器。

 3、SPI的非连续传输模式

         第1步:等待TXE为1

        第2步:写入发送的数据至TDR

        第3步:等待RXNE为1

        第4步:读取RDR接收的数据

三、代码实现SPI(CubeIDE)

                 将SPI2配置成motorola模式,传输8位数据,高位先行

         时钟配置为4分频,传输速率为42.5M,CPOL = 0、CPHA = 0为模式0。

        CRC校验的多项式不使用、使用软件NSS。

         输出的GPIO口如上。

四、代码输出结果

 后续分频系数调整为256分频,这样逻辑分析仪能抓取到

五、SPI中断收发

1、代码实现

 2、任务结果

        上面的是MISO,下面是MOSI

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPI(串行外设接口)是一种串行通信协议,用于在微控制器或其他集成电路之间进行数据传输。SPI接口通常由一个主设备和一个或多个从设备组成。 SPI通信是全双工的,意味着主设备可以同时发送和接收数据。通信通过四个线路进行:时钟线、主输入/从输出(MISO)线、主输出/从输入(MOSI)线和片选(Chip Select,CS)线。主设备通过将时钟线设置为高电平和低电平来控制通信的同步。 在SPI通信中,主设备通过选择特定的从设备,将其片选线置为低电平,以标识正在与该设备通信。然后,主设备通过MOSI线发送数据,从设备通过MISO线接收数据。同时,从设备也可以将数据通过MISO线发送给主设备。 SPI的操作速度相对较快,可以在较短的时间内传输大量数据。SPI接口通常被用于与外部设备进行通信,如存储器芯片、传感器、显示屏等。 对于SPI接口的收发数据操作,主设备首先通过设置适当的寄存器或控制位来配置SPI接口的通信参数,如数据位长度、时钟频率等。然后,主设备将待发送的数据写入发送缓冲区,通过MOSI线发送出去。同时,主设备可以通过读取接收缓冲区来接收从设备发送的数据,通过MISO线获取。 SPI的收发数据操作是基于硬件的,需要根据具体的使用平台和设备进行正确的配置和编程。在编程过程中需要注意时钟频率、数据位顺序、传输模式等细节,以确保数据的正确传输和接收。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值