1)sip管理模式分为:硬件管理和软件管理;主要由NSS 、SSI、SSM决定;

  NSS是芯片上一个实实在在的引脚,SSI和SSM是SPI_CR1控制器里的的位。

  值得注意的是:NSS分外部引脚和内部引脚的。外部NSS引脚当然就是与GPIO 共用的引脚,芯片上可以肉眼看到这个引脚;内部NSS引脚就是STM32芯片里集成的SPI模块引脚,我们肉眼是看不见的它的,换句话说,真正与SPI通信控制器连接的是内部NSS引脚,外部NSS引脚不能直接连到芯片内部的SPI模块,而是先连接内部NSS引脚,通过内部NSS引脚作用SPI模块。

  

2)基本概述:

  位SSM在SPI_CR1控制器里默认为0;

  SSM可以控制内部NSS引脚与SSI(一个寄存器,软件模式)相连,还是与NSS外部引脚(真正的STM32引脚,硬件模式)相连。真正作用的是内部NSS引脚(内部NSS引脚才真正连接到SPI通信控制器上)

  当SSM=0,说明使用硬件管理模式,此时NSS有效,内部NSS引脚与外部NSS引脚相连,忽视SSI位,对SPI_CR1的 SSI位 的写操作无效;

  当SSM=1,说明使用软件管理模式,此时SSI位有效,内部NSS引脚与SSI相连,忽视外部NSS引脚,我们可以把外部NSS引脚当做普通IO口;

3)配置:

SPI从模式的配置(MSTR=0)
1.硬件模式:SSM=0,当外部NSS为低电平时,内部NSS也为低电平,此时可以传送数据。

      外部NSS引脚必须作为输入模式,此引脚就成为了该器件的片选引脚:

        外部NSS引脚设置为复用功能+无上下拉,外部NSS引脚需要手动连接一个低电平,此时可以传送数据,低电平必须维持到SPI关闭为此,相当片选该从器件;

      外部NSS引脚设置为复用功能+无上下拉,外部NSS引脚手动连接一个高电平,内部NSS引脚被外部高电平拉高,此时不可以转送数据,因为相当取消从器件的片选;
2.软件模式:SSM=1,并SSI=0.STM32芯片让内部NSS引脚为低电平,此时可以传送数据。

      外部NSS引脚被释放,可做普通IO作为其他用途使用。

SPI主模式的配置(MSTR=1)

1.硬件模式:SSM=0  
   A:输入模式:SSOE=0,在外部NSS引脚为高电平,即内部NSS引脚也为高电平时,才能进行数据传输。 如果要使能从设备,还需要一个GPIO引脚。

    在此情况下,外部NSS要是被接低电平,则会进入主模式故障,MSTR会清零,由主模式进入从模式。

    外部NSS引脚需要配置为复用+无上下拉,且外部NSS引脚必须接入一个高电平,它才能维持主模式状态。
   B:输出模式:SSOE=1, 外部NSS引脚会被芯片自动输出低电平,使能从设备,进行数据传输。 不需要额外的GPIO引脚就能控制从设备。

    外部NSS引脚需要配置为复用功能,再把此引脚连接从器件的CS引脚,因为此情况下,外部NSS引脚就相当于片选引脚了。

2.软件模式:SSM=1,SSI=1,将内部NSS引脚设置为高电平。这样随时可以传输数据。当然多数情况还需要一个GPIO引脚输出低电平,来使能从设备,让从设备可以接收数据。

3.需要注意的是,SSOE位必须在主模式下配置才有效。它的作用是在硬件管理的主模式下是否开启外部NSS引脚的输入、输出模式。这是芯片手册上说的。

综上所述,NSS引脚就是片选CS引脚是很不负责任的说法。

本人也是参考下面此文章,此作者前半部分讲的非常好,但不能全信此作者讲,特别是他所写的后半部分,有些个人认为还是有些缺陷:

https://blog.csdn.net/andylauren/article/details/52259703

SPI_CR2  :

SPI_CR1:

STM32之spi管理模式的更多相关文章

  1. STM32的SPI口的DMA读写[原创www.cnblogs.com/helesheng]

    SPI是我最常用的接口之一,连接管脚仅为4根:在常见的芯片间通信方式中,速度远优于UART.I2C等其他接口.STM32的SPI口的同步时钟最快可到PCLK的二分之一,单个字节或字的通信时间都在us以 ...

  2. oled stm32的spi

    其实各种协议是很重要的,这篇文章就当做我对spi协议的一个整理吧. 必要的spi简介: https://www.cnblogs.com/zengsf/p/7221207.html?utm_source ...

  3. Azure 新的管理模式 —— Resource Manager

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  4. Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理模式

    6.3.创建与管理模式 概述:DB内组织对象的一种逻辑结构.一个DB内能够有多个模式.在未指定模式时默认放置在public中.能够通过"\dn"方式查看数据库中现有模式: test ...

  5. Vuex(一)——vuejs的状态管理模式

    一.Vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式. 它采用集中式存储 管理 应用的所有组件 的 状态,并以 相应的规则 保证 状态以一种 可预测的方式 发生变化. ...

  6. 理解vuex的状态管理模式架构

    理解vuex的状态管理模式架构 一: 什么是vuex?官方解释如下:vuex是一个专为vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的 ...

  7. 【转】STM32三种启动模式

    @2018-12-16 [小记] STM32 启动区域 STM32三种启动模式 借助上述文章理解官方文档<一种从用户代码调用系统存储器中 Bootloader 的方法 >

  8. 五、vue状态管理模式vuex

    一.vuex介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 即data中属性同时有一 ...

  9. STM32 F4 SPI Accelerometer

    STM32 F4 SPI Accelerometer

随机推荐

  1. 小福bbs-冲刺日志(第六天)

    [小福bbs-冲刺日志(第六天)] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 后端努力完成大部分功能操作,前端UI完成大部分功能测试 作 ...

  2. postgresql大数据查询加索引和不加索引耗时总结

    1.创建测试表 CREATE TABLE big_data(  id character varying(50) NOT NULL,  name character varying(50),  dat ...

  3. 02_01Graph_Session

    import numpy as npimport tensorflow as tfnp.random.seed(42)"""学习:1.图的创建2.tf.constant( ...

  4. C# ffmpeg 视频处理

    ffmpeg的官网:https://ffmpeg.org/ ffmpeg是一个强大的视频处理软件(控制台程序),可以通过C# 调用ffmpeg,并传入指令参数,即可实现视频的编辑. /// <s ...

  5. Java hashCode与equals学习

    1.关于Object类的equals方法的特点 a) 自反性: x.equals(x) 应该返回true b) 对称性: x.equals(y)为true,那么y.equals(x) 也为true c ...

  6. 字节码(.class)文件的加载过程

    类加载 在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的. 类型可以是Class,Interface, 枚举等. Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机 ...

  7. laravel 通过ftp上传的时候报错 Use of undefined constant FTP_BINARY - assumed 'FTP_BINARY

    用Laravel中的filesystems里面的ftp上传文件时报错.在windows上开发,文件上传的时候碰到上面的问题,搜了些资料,发现是php7的ftp拓展默认未开启. filesystems是 ...

  8. 高性能计算 —— 中国金融服务业创新发展的助推剂 & 微软

    “高性能计算 —— 中国金融服务业创新发展的助推剂“六大盘点 - 微软 - 博客园https://www.cnblogs.com/stbchina/archive/2011/12/02/HPC-in- ...

  9. openresty开发系列12--lua介绍及常用数据类型简介

    openresty开发系列12--lua介绍及常用数据类型简介 lua介绍  1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de ...

  10. QVector init error

    QMetaType::registerType: Binary compatibility break -- Size mismatch for type 'PtsData' [1025]. Prev ...