首页 > 其他分享 >STM32_11(SPI)

STM32_11(SPI)

时间:2023-05-22 10:33:07浏览次数:43  
标签:11 引脚 SS 主机 STM32 SPI 从机 寄存器 移位

SPI通信

  • SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线
  • 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)
  • MOSI:是主设备输出、从设备输入的数据信号线;、MISO:主设备输入、从设备输出的数据信号线; 
  • 同步,全双工
  • 支持总线挂载多设备(一主多从)

 

SPI硬件电路

  • 所有SPI设备的SCK、MOSI、MISO分别连在一起
  • 主机另外引出多条SS控制线,分别接到各从机的SS引脚
  • 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
  • 主机只能选择一个从机,选择多个从机就会导致数据冲突。当从机的SS引脚为高电平,就是从机未被选中,它的MISO引脚必须切换为高阻态,也就是把引脚断开。这样就可以防止一条线有多个输出,而导致的电平冲突问题。

 

移位示意图

移位寄存器有一个时钟输入端,因为SPI都是高位先行,所以每来一个时钟,移位寄存器就会向左移位,从机的移位寄存器同理。移位寄存器的时钟源是由主机提供的,这里叫做波特率发生器,它产生的时钟驱动主机的移位寄存器进行移位。同时,这个时钟也通过SCK引脚进行输出,接到从机的移位寄存器里。主机移位寄存器左边移出去的数据通过MOSI引脚,输入到从机的移位寄存器的右边,从机移位寄存器的数据根据MISO输入到主机移位寄存器的右边。

首先规定,波特率发生器时钟上升沿,所有移位寄存器向左移动一位,移出去的位放在引脚上,波特率发生器时钟的下降沿,引脚上的位,采样输入到移位寄存器的最低位。

 

SPI时序基本单元

起始条件和终止条件

  • 起始条件:SS从高电平切换到低电平
  • 终止条件:SS从低电平切换到高电平

 

模式1

  • 交换一个字节(模式1)
  • CPOL=0:空闲状态时,SCK为低电平
  • CPHA=1(时钟相位:决定第一个时钟采样移入还是第二个时钟采样移入):SCK第一个边沿移出数据,第二个边沿移入数据

SS高电平时,MISO用一条中间的线表示高阻态,SS下降沿之后,从机的MISO被允许开启输出。SS上升沿之后,从机的MISO必须置回高阻态。当SCK为上升沿时,主机和从机同时移除数据,主机通过MOSI移除最高位,此时的MOSI的电平就表示主机要发送数据B7,从机通过MISO移除最高位,此时MISO就表示从机要发送数据B7。之后时钟运行,产生下降沿,此时的主机和从机需同时移入数据,也就是数据采样,这里主机移除B7,进入从机移位寄存器的最低位,从机移除B7,进去主机移位寄存器的最低位。一个时钟脉冲产生完毕,一位数据传输完毕。

 

SPI时序(发送指令)

在这里我们使用的是模式0,首先SS是高电平,SCK是低电平。SS产生下降沿,时序开始,在下降沿时刻,MOSI和MISO就开始比变换数据,MOSI的指令码仍为0,所以保持低电平不变,MISO从机没有数据发给主机,引脚电平没有变换。从机采样输入,得到0,主机采样输入,得到1。之后主机要发送数据1,SCK下降沿,数据移出,主机将1移出到MOSI,MOSI变高电平。当主机发送0时候,SCK下降沿,MOSI变为0。SCK上升沿,数据采样,从机接收数据为0。总体来说,SCK低电平时变化时期,高电平时读取时期(下降沿变换数据,上升沿采样数据)。

这个SPI时序代表,主机用0x06换来了从机的0xFF。

 

SPI时序(指定地址写)

向SS指定的设备,发送写指令(0x02),随后在指定地址(Address[23:0])下,写入指定数据(Data)。

 

SPI时序(指定地址读)

向SS指定的设备,发送写指令(0x02),随后在指定地址(Address[23:0])下,写入指定数据(Data)。

 

标签:11,引脚,SS,主机,STM32,SPI,从机,寄存器,移位
From: https://www.cnblogs.com/toutiegongzhu/p/17418651.html

相关文章

  • 基于全志D1-H的Tina Linux SPI主从通信验证实录
    本文转载自:https://bbs.aw-ol.com/topic/3031作者@whycan矿工-小叶背景主控:D1H板卡:两块哪吒开发板(以下简称为主机,从机)操作系统:TinaLinux2.0问题验证D1H芯片SPI主从机通信.硬件接线主机SPI从机SPI19SPI1_MOSISPI1_MOSI1921SPI1_MISOS......
  • C++11关键字constexpr看这篇就够了
    一、在普通函数中的使用例如下面的代码, 数组的大小必须是常量,在声明数组array时,用函数返回值,此时会报错:errorC2131:表达式的计算结果不是常数note:对未定义的函数或为未声明为“constexpr”的函数的调用导致了故障用constexpr关键字可以解决这种问题,在GetLen函数前加con......
  • ICS TRIPLEX工业通讯模块T8110B
    W;① ⑧ 0 ③  0 ① ⑦  7  7 ⑤  9ICSTRIPLEX工业通讯模块T8110B,T8403,T8431,T8403,T8461,T8461C,T8110B,T8403。T8403C,T9432,T9110,T9451,ICSTRIPLEX工业通讯模块T8110B,T8403,T8431,T8403,T8461是电喷发动机控制系统中最重要的传感器之一。发动机转速传感器的作......
  • 2022.11.24 NOIP模拟赛
    A.不降序列题目描述lzx2005了解到有一种在\(O(n\logn)\)的时间复杂度内求出一个序列\(a\)的最长不下降子序列的方法如下:维护一个序列\(b\),初始时为空。依次考虑\(a_1,a_2,\ldots,a_n\),当考虑到\(a_i\)时,求出序列\(b\)中第一个比\(a_i\)大的元素,然后使用\(a_i......
  • 2022.11.23 51nod 图论专场?
    A反转Dag图:题面给出一个\(n\)个点\(m\)条边的有向图,顶点编号\(1\)到\(n\),边的编号为\(1\)到\(m\)。你可以选择一些边进行反转(即从\(u\)到\(v\)的边反转后变为从\(v\)到\(u\)的边),将每条边反转都需要一定代价。最终使得整个图变成一个\(Dag\)图。总的反......
  • STM32 CAN过滤器配置详解
     STM32CAN过滤器配置详解_stm32can配置_路过的小熊~的博客-CSDN博客路过的小熊~已于 2022-07-3123:09:16 修改 1前言STM32F10X的bxCAN是基本扩展CAN(BasicExtendedCAN)的缩写,它支持CAN协议2.0A和2.0B。在CAN协议里,报文的标识符不代表节点的地址,而是和......
  • 微软推出Windows 11 Insider预览版22621.1255和22623.1255
    您好,WindowsInsider,今天我们将向Beta频道发布Windows11Insider预览版22621.1255和22623.1255(KB5022918)。Build22623.1255=推送新功能。Build22621.1255=默认情况下关闭新功能。提醒:以前在22622版本上的内部人员将通过启用包自动转移到22623版本。启用包人为地增加了新功能推出......
  • Jmeter函数助手11-BeanShell
    BeanShell函数用于简单的计算或者运行编程脚本。表达式求值:填入脚本代码或脚本文件${__BeanShell(source(“test.bsh”))}存储结果的变量名(可选) 1、填入一个计算公式返回计算结果88/22=4,${__BeanShell(88/22,)} ......
  • 基于状态机STM32/51密码锁
    1、状态机讲解状态机其实在学习数字电路的接触过但是我已经忘得差不多了,由于我的毕业设计是关于FPGA的题目,状态机是重中之重。刚才在贴吧有uu们问关于单片机之类的密码锁的问题,突然想到之前蓝桥杯当时也有类似的题目,我当时处理的不是特别好,所以现在想着用C去实现,本科毕设时我导师......
  • docker for windows 和 安装oracle11g
    一:wsl1.安装wsl默认环境Ubuntu,(第一次安装好像不能通过import的方式,测试的不行,也有可能姿势不对,不太确定)wsl--install查看命令wsl-l-v#查看已安装的发行版及运行状态,install之后,执行此命令会显示相关Ubuntu信息2.导出Ubuntu默认安装在系统盘,如果不需要调整位置......