STM32之spi管理模式
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管理模式的更多相关文章
- STM32的SPI口的DMA读写[原创www.cnblogs.com/helesheng]
SPI是我最常用的接口之一,连接管脚仅为4根:在常见的芯片间通信方式中,速度远优于UART.I2C等其他接口.STM32的SPI口的同步时钟最快可到PCLK的二分之一,单个字节或字的通信时间都在us以 ...
- oled stm32的spi
其实各种协议是很重要的,这篇文章就当做我对spi协议的一个整理吧. 必要的spi简介: https://www.cnblogs.com/zengsf/p/7221207.html?utm_source ...
- Azure 新的管理模式 —— Resource Manager
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理模式
6.3.创建与管理模式 概述:DB内组织对象的一种逻辑结构.一个DB内能够有多个模式.在未指定模式时默认放置在public中.能够通过"\dn"方式查看数据库中现有模式: test ...
- Vuex(一)——vuejs的状态管理模式
一.Vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式. 它采用集中式存储 管理 应用的所有组件 的 状态,并以 相应的规则 保证 状态以一种 可预测的方式 发生变化. ...
- 理解vuex的状态管理模式架构
理解vuex的状态管理模式架构 一: 什么是vuex?官方解释如下:vuex是一个专为vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的 ...
- 【转】STM32三种启动模式
@2018-12-16 [小记] STM32 启动区域 STM32三种启动模式 借助上述文章理解官方文档<一种从用户代码调用系统存储器中 Bootloader 的方法 >
- 五、vue状态管理模式vuex
一.vuex介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 即data中属性同时有一 ...
- STM32 F4 SPI Accelerometer
STM32 F4 SPI Accelerometer
随机推荐
- Linux下的crontab定时执行任务命令
0x00 简介 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的 ...
- 三大框架 之 OGNL表达式
目录 OGNL 什么是OGNL OGNL与EL表达式对比 OGNL功能 OGNL使用要素 OGNL入门 java程序使用ognl struts2中使用ONGL OGNL 什么是OGNL OGNL是Ob ...
- PHP是单线程还是多线程?
PHP 从设计之初到流行起来都没有出现明显需要用多线程才能解决的需求.某些需要用到多线程的地方也有相应的解决方案和替代方案.多线程并不总是比单线程优,多线程可能会引入其他问题(例如:两个线程同时调用一 ...
- Kubernetes 下零信任安全架构分析
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 杨宁(麟童) 阿 ...
- elasticsearch 的入门
参考文档 1.全文搜索引擎 Elasticsearch 入门教程(http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html) 2.elasti ...
- Linux_CentOS软件安装yum
在 Linux 操作系统下,几乎所有的软件均通过 RPM 进行安装.卸载及管理等操作.RPM 的 全称为 Redhat Package Manager ,是由 Redhat 公司提出的,用于管理 Li ...
- mac中matplotlib不支持中文的解决办法
参考:https://blog.csdn.net/kaizei_pao/article/details/80795377 首先查看matplotlib已加载的字体: import matplotlib ...
- Fiddler抓包显示请求时延
两种方式:配置和加代码.配置只是将隐藏的时延字段显现了出来,格式没法改:加代码就随你写了,格式自己说了算. 先说配置的,在左边框顶部字段名称右击鼠标 -> 点击Customize colums. ...
- LeetCode_235. Lowest Common Ancestor of a Binary Search Tree
235. Lowest Common Ancestor of a Binary Search Tree Easy Given a binary search tree (BST), find the ...
- AI佳作解读系列(六) - 生成对抗网络(GAN)综述精华
注:本文来自机器之心的PaperWeekly系列:万字综述之生成对抗网络(GAN),如有侵权,请联系删除,谢谢! 前阵子学习 GAN 的过程发现现在的 GAN 综述文章大都是 2016 年 Ian G ...