SPI (Serial Peripheral interface) 串行外围设备接口

SPI特征
    3线全双工同步传输,第4根线是片选
    8或16位传输帧格式选择
    主或从操作
    支持多主模式
    8个主模式波特率预分频系数(最大为fPCLK/2)
    从模式频率 (最大为fPCLK/2)
    主模式和从模式的快速通信
    主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变
    可编程的时钟极性和相位
    可编程的数据顺序, MSB在前或LSB在前
    可触发中断的专用发送和接收标志
    SPI总线忙状态标志
    支持可靠通信的硬件CRC
            在发送模式下, CRC值可以被作为最后一个字节发送
            在全双工模式中对接收到的最后一个字节自动进行CRC校验
    可触发中断的主模式故障、过载以及CRC错误标志
    支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求

SPI 工作模式
    当器件作为主机时,使用一个IO引脚拉低相应从机的选择引脚(NSS),传输的起始由主机发送数据来启动,时钟(SCK)信号由主机产生,通过MOSI发送数据,同时通过MISO接收从机发出的数据。
    当器件作为从机时,从机的选择引脚(NSS)被主机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过MISO引脚输出数据。

SPI引脚

    MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
    MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
    SCK:串口时钟,作为主设备的输出,从设备的输入。
    NSS:从设备选择。这是一个可选引脚,用来选择主/从设备。它的功能是用来做片选引脚,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。从设备的NSS引脚可以由主设备的一个标准IO引脚来驱动。一旦被使能(SSOE位), NSS引脚也可以作为输出引脚,并在SPI处于主模式时拉低;此时,所有的SPI设备,如果它们的NSS引脚连接到主设备的NSS引脚,则会检测到低电平,如果它们被设置为NSS硬件模式,就会自动进入从设备状态。当配置为主设备、 NSS配置为输入引脚(MSTR=1, SSOE=0)时,如果NSS被拉低,则这个SPI设备进入主模式失败状态:即MSTR位被自动清除,此设备进入从模式。


MOSI脚相互连接, MISO脚相互连接。这样,数据在主和从之间串行地传输(MSB位在前)。通信总是由主设备发起。主设备通过MOSI脚把数据发送给从设备,从设备通过MISO引脚回传数据。这意味全双工通信的数据输出和数据输入是用同一个时钟信号同步的;时钟信号由主设备通过SCK脚提供。
主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器通过MOSI信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机,这样两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节,反之,主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

NSS说明

有2种NSS模式
软件NSS模式
    SPI主机
        可以通过设置SPI_CR1寄存器的SSM位来使能这种模式。在这种模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动。
        SSI只有在SSM为1时才有效,它决定了NSS上的电平,在NSS引脚上的IO操作无效。也就是说NSS的外部引脚不影响内部引脚,内部引脚值由SSI决定。
        设置SPI_CR1寄存器的SSM=1和SSI=1
        SSM=1使能软件管理
        NSS由内部和外部引脚。
            外部引脚做其他用途,如从设备的片选信号。
            内部引脚通过SSI位来驱动,SSI=1时,NSS电频拉高。要保持MSTR=1,SPE=1,也就是要保持主机模式,只有内部NSS连接到高电平,这两位才能保持为1.
    SPI从机
        NSS引脚在完成字节传输之前必须拉低,在软件模式下设置SSM=1,SSI=0.
硬件模式
    NSS输出被使能:当STM32F10xxx工作为主SPI,并且NSS输出已经通过SPI_CR2寄存器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从SPI设备。当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主设备;如果它不能拉低NSS,这意味着总线上有另外一个主设备在通信,这时将产生一个硬件失败错误(Hard Fault)。    
    NSS输出被关闭:允许操作于多主环境。

时钟信号的相位和极性    
    SPI_CR1寄存器的CPOL(时钟极性)和CPHA(时钟相位),能够组成四种可能的时序关系。这个位的组合选择数据采样的时钟边缘。
    CPOL 位控制在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。
    CPOL = 0,SCK引脚在空闲时为低电平
    CPOL = 1,SCK引脚在空闲时为高电平
    CPHA = 0,SCK时钟的第一个边沿(CPOL=0下降沿,CPOL=1上升沿)进行数据位的采样,数据在第一个时钟边沿被锁存。
    CPHA = 1,SCK时钟的第二个边沿(CPOL=0下降沿,CPOL=1上升沿)进行数据位的采样,数据在第二个时钟边沿被锁存。

数据帧格式
    根据SPI_CR1寄存器中的 LSBFIRST 位,输出数据位时可以MSB在先也可以LSB在先。
    根据SPI_CR1寄存器中的 DFF 位,每个数据帧可以是8位或是16位。

配置SPI为从模式
    配置步骤
    1. 设置DFF位以定义数据帧格式为8位或16位。
    2. 选择CPOL和CPHA位来定义数据传输和串行时钟之间的相位关系。为保证正确的数据传输,从设备和主设备的CPOL和CPHA位必须配置成相同的方式。
    3. 帧格式(SPI_CR1寄存器中的LSBFIRST位定义的”MSB在前”还是”LSB在前”)必须与主设备相同。
    4. 硬件模式下(参考从选择(NSS)脚管理部分),在完整的数据帧(8位或16位)传输过程中,NSS引脚必须为低电平。在NSS软件模式下,设置SPI_CR1寄存器中的SSM位并清除SSI位。
    5. 清除MSTR位、设置SPE位(SPI_CR1寄存器),使相应引脚工作于SPI模式下。
    在这个配置中, MOSI引脚是数据输入, MISO引脚是数据输出。

配置SPI为主模式
    在主配置时,在SCK脚产生串行时钟。
    配置步骤
    1. 通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。
    2. 选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关系。
    3. 设置DFF位来定义8位或16位数据帧格式。
    4. 配置SPI_CR1寄存器的LSBFIRST位定义帧格式。
    5. 如果需要NSS引脚工作在输入模式,硬件模式下,在整个数据帧传输期间应把NSS脚连接到高电平;在软件模式下,需设置SPI_CR1寄存器的SSM位和SSI位。如果NSS引脚工作在输出模式,则只需设置SSOE位。
    6. 必须设置MSTR位和SPE位(只当NSS脚被连到高电平,这些位才能保持置位)。
    在这个配置中, MOSI引脚是数据输出,而MISO引脚是数据输入。

状态标志
    应用程序通过3个状态标志可以完全监控SPI总线的状态
    TXE(发送缓冲器空闲),为1时,发送缓冲器为空,可以写下一个待发送的数据进入缓冲器中,当写入SPI_DR时,TXE被清零。
    RXNE(接收缓冲器非空),为1时,接收缓冲器中包含有效的接收数据,读SPI_DR寄存器,可以清零RXNE
    BSY(忙),由硬件设置与清除,表示SPI通信层的状态。

SPI 中断
    中断事件                  事件标志         使能控制位
发送缓冲器空标志          TXE                  TXEIE
接收缓冲器非空标志     RXNE               RXNEIE
主模式失效事件            MODF               ERRIE
溢出错误                       OVR                  ERRIE
CRC错误标志              CRCERR           ERRIE

STM32F103 SPI相关推荐

  1. STM32F103 SPI 主机模式分析

    STM32F103的SPI模块,跟通用SPI芯片的工作模式有些区别,手册上也没有特别注明,所以光看手册有时候还不容易理解. STM32上的不同之处在于SPI模块工作在主机模式时,模块内部有一个控制脚必 ...

  2. STM32F103 SPI flash操作注意事项

    之前一直使用的W25Q16 spi flash都没问题,换了一款W25Q80后发现工作不正常,经过测试,初步定位到问题在于初始化SPI后是否将CS拉高.于是又去查看了一下原厂代码: 发现原厂的代码初始 ...

  3. stm32f103 spi crc

    用户手册中关于SPI的CRC中的这段说明,是针对通过软件置位CRCNEXT这个操作的. 使用SPI的CRC功能时,如果不是通过DMA的方式,需要通过软件置位CRCNEXT位来说明接下来要发送CRC. ...

  4. stm32f103 spi slave从机模式miso需要上拉

    stm32f103t8u6 spi slave从机模式 miso管脚需要上拉电阻!! 测试了20K阻值的无效,2K有效!

  5. WS2812驱动 SPI+DMA 无需降频 一个灯占用9Byte的RAM

    WS2812驱动 STM32F103 SPI+DMA 无需降频 一个灯占用9Byte的RAM 对于WS2812不了解的朋友可以先看一下这些 ​[STM32]WS2812介绍.使用SPI+DMA发送数据 ...

  6. 如何使用MCP2518FD外部CAN FD控制器实现速速CAN通信

    MCP2518FD外部CAN FD控制器具有小尺寸和SPI接口,可实现轻松连接.可将CAN FD通道轻松添加到缺少CAN FD外设或没有所需CAN FD通道的微控制器上.MCP2518FD支持经典格式 ...

  7. STM32F103RB 实作笔记(九)- PWM + SPI +MAX6675 整合试验 (正点原子 STM32F103 nano开发板)程式解析

    个人工作上的关系,需要做一款温度控制风扇速度的控制器,还需要能够看到温度和PWM的值.于是我用这个不熟悉的 STM32F103 试试,顺便把 PWM 和 SPI 也了解一番. 一开始当然也是跌跌撞撞, ...

  8. 个人项目 免费开源 基于STM32F103的oled示波器,频谱fft adc电压采集 spi接口0.96寸oled

    @基于stm32的adc检测波形 0.96oled显示(spi/iic)移植gui库(开源). 使用标准库开发,未使用dsp官方库. adc采集到电压并且在oled上显示. 支持0-3.3v电压采集显 ...

  9. STM32F103标准库开发---SPI实验---W25Qxx系列外部Flash芯片

    STM32F103标准库开发----目录 STM32F103标准库开发----SPI实验----基本原理 STM32F103标准库开发----SPI实验----底层驱动程序 W25Qxx全系列---- ...

最新文章

  1. (8) Xamarin使用Jar檔
  2. 软件需求工程与UML建模——第九组第二周工作总结
  3. java错误: 非法字符: '\ufeff' 需要class, interface或enum
  4. 《移动应用开发》作业——HTML、CSS
  5. java fast math,Java FastMath.signum方法代码示例
  6. 线程休眠 sleep
  7. 水涨船高!造车新势力平均月薪15367元,自动驾驶算法岗年薪可达百万
  8. 常见浏览器的兼容问题
  9. HDU1877 又一版 A+B【进制】
  10. kubernetes中port、target port、node port的对比分析,以及kube-proxy代理
  11. 【python】见过if else组合,但是你见过for else组合吗?
  12. CSS font-family 各字体一览表
  13. STM32_ADC模数转换的基本原理
  14. 致敬达叔 -- 80、90的童年观影记忆
  15. Kassl dOPC Client Toolkit Version 4.36XX-国内数一数二的工具包全能版
  16. php判断floor,php floor()函数
  17. python根据x轴、y轴坐标在坐标轴里画出曲线图
  18. 单片机中常说的 1T 和 12T 的意思
  19. rono在oracle的作用_oracle中prior关键字的作用
  20. android壁纸保存目录,如何获取安卓手机当前壁纸的路径

热门文章

  1. 函数的闭包,闭包的用途
  2. Visual Studio Code (echarts)数据可视化瀑布图实现及标题的格式设置标题背景颜色以及设置副标题和标题加边框,设置边框背景和边框颜色柱形图颜色及柱形图的宽度设置完整代码
  3. 22个最流行的三维重建软件【2022】
  4. 在微软从测试开发工程师到主管
  5. 怎样让自我评价变成简历最出彩的地方?
  6. 这应该是适配安卓8.0最好的亲身列子了。。。。
  7. IDEA build委托到Maven build
  8. java启动参数 -xmn_Java 进阶 (三) JVM参数说明
  9. Windows系统中哪些文件夹可以删除
  10. 计算机毕业设计源代码java项目开发实例ssm+mysql实现零食商城系统(电商项目)[包运行成功]