[STM32F4xx 学习] SPI小结
一、STM32F4xx系列的SPI特点:
1. 支持全双工的3线SPI模式(即SCK, MISO, MOSI)
2. 支持单工2线传输,同时数据线可以设置成单向或者双向模式
3. 8-bit, 16-bit可选的数据长度
4. 可选主从模式,并且支持多主模式
5. 主模式8种波特率选择(最高波特率fPCLK/2),从模式最高频率为fPCLK/2
6. 主从模式下,片选线(NSS)可以设置为硬件控制或软件控制,同时支持主/从操作下的动态转换
7. 时钟线的极性和相位可以通过寄存器设置
8. 移位寄存器可以设置成高位先出(MSB-first)或者低位先出(LSB-fisrt)
9. 具有SPI 总线忙碌(bus busy)标志位
10. 支持 SPI TI 模式
11. 支持硬件CRC
- 可以在数据流后传输CRC(发送模式)
- 自动校验校验CRC(接收模式)
12.具有主模式错误标志位,溢出标志位,CRC错误校验标志位,同时可触发中断
13. 1-byte发送/接受缓存,并且支持DMA请求。
二、传输过程中的状态标志位(BSY, TXE, RXNE)
1. 全双工主模式连续传输

图1. 全双工主模式连续传输时序图
- BSY 在传输时硬件置1,传输完成后硬件清0,图1方框①所示
- 当Tx缓存器无数据时,TXE置1;对DR(数据寄存器,下同)进行写操作将使TXE清0,图1方框②所示
- 当SPI接收到完整的数据后(Rx 缓存器不为0),RXNE将置1;对DR进行读操作将使RXNE清0,图1方框③所示
2. 全双工从模式连续传输

图2. 全双工从模式连续传输
- BSY在传输期间硬件置1,在下一次传输的第一个SPI时钟周期硬件清0,然后再由硬件置1,图2方框①所示
- 当Tx缓存器无数据时,TXE置1;对DR进行写操作将使TXE清0,图2方框②所示
- 当SPI接收到完整的数据后(Rx 缓存器不为0),RXNE将置1;对DR进行读操作将使RXNE清0,图2方框③所示
3. 单工发送主模式连续传输

图3. 单工发送主模式连续传输时序图
- BSY在传输期间硬件置1,在传输完成后硬件清0,图3方框①所示
- 当Tx缓存器无数据时,TXE置1;对DR进行写操作将使TXE清0,图3方框②所示
4. 单工发送从模式连续传输

图4. 只发送从模式连续传输时序图
- BSY在传输期间硬件置1,在下一次传输的第一个SPI时钟周期硬件清0,然后再由硬件置1,图4方框①所示
- 当Tx缓存器无数据时,TXE置1;对DR进行写操作将使TXE清0,图4方框②所示
5. 单工接收模式连续传输

图5. 单工接收模式连续传输时序图
- 当SPI接收到完整的数据后(Rx 缓存器不为0),RXNE将置1;对DR进行读操作将使RXNE清0,图5方框①所示
6. 非连续传输

图6. 非连续传输时序图
- BSY 在传输期间硬件置1,在每次传输完成后置0,如图6方框①所示
- 当Tx缓存器无数据时,TXE置1;对DR进行写操作将使TXE清0,图6方框②所示
三、连续传输与非连续传输的定义
主模式下,假如程序能很快地检测TXE的上升沿或TXE中断(即发送缓存器为空),在当前数据还未发送完成时(即移位寄存器还有数据尚未发送完),对DR寄存器进行写操作,这种情况称作连续传输,传输过程中SPI CLK是连续的,如图1~图5所示。
反之,假如在对DR寄存器进行写操作时,上一次的数据已发送完(即移位寄存器为空),这种情况称为非连续传输,传输过程中SPI CLK是断续的,如图6所示。
/×××××××××××××××××××××××××××××××××××××××× THE END××××××××××××××××××××××××××××××××××××××××××××/
[STM32F4xx 学习] SPI小结的更多相关文章
- [STM32F4xx 学习] SPI与nRF24L01+的应用
前面已经总结过STM32Fxx的特点和传输过程,下面以nRF24L01+ 2.4GHz无线收发器为例,来说明如何使用SPI. 一.nRF24L01+ 2.4GHz无线收发器的介绍 1. 主要特性 全球 ...
- openresty 学习笔记小结:综合应用实例
openresty 学习笔记小结:综合应用实例 这个综合实验实现的功能其实很简单,用户访问一个页面,显示一个默认页面.输入参数(post或者get都可以),如果参数在数据库查询得到并满足一定条件,根据 ...
- [asm] 小菜汇编基础和学习技巧小结(一)
以下小结纯属小菜自学过程产生的dump,大神请飘过! 汇编是一门庞大复杂的学问,在计算机的世界里差不多无所不入.很多编程领域都会或多或少跟汇编打交道.本人不是科班出身的程序员,所以很多基础都为零,学历 ...
- z-index学习知识小结
一.z-index七阶层叠顺序表 1.层叠顺序的大小比较: background/border < 负z-index < block块状水平盒子 < float浮动盒子 < i ...
- HAL驱动库学习-SPI
如何使用SPI库1 声明SPI hanlde, 例如: SPI_HandleTypeDef hspi2 通过实现HAL_SPI_MspInit()函数初始化底层资源 以下两个必须进行初始化 a 使能s ...
- HTTP协议——学习资料小结
嗯,这几天回头再次的学习Servlet的知识点,觉得HTTP协议的内容是相当重要的,现在虽然知道浏览器与应用程序的交互离不开它,但是怎么将信息从浏览器传输到服务器的这个知识点还是一个盲点.于是从网上找 ...
- Python几周学习内容小结
环境配置 学习python首先是要配置环境,我们选择了Anaconda. 什么是Anaconda:专注于数据分析的python发行版本. 为什么选择Anaconda:省事省心,分析利器 至于下载和安装 ...
- 初学c# -- 学习笔记 小结
学了到了好些东西, 做了一些练习. 一.C# winform Socket 1.程序主要部分只是用了 Panel.Picturebox.Label.RicheditBox四个组件,滚动条.编辑框什么的 ...
- 2017年7月ROS学习资料小结
<孙子兵法·谋攻篇>:"上兵伐谋,其次伐交,其次伐兵,其下攻城:攻城之法为不得已." 任何发生在自己国土上的战争,即便胜利,也饱含屈辱. ----~~~~----Gaz ...
随机推荐
- RPA账户和密码管理方案
如何将登录业务系统的账户和密码"更好的,更合适"地交给RPA? 相信很多小伙伴们在做RPA的时候, 都会或多或少的遇到类似的问题. 正常情况下IT管理人员都会给真实的业务人员分配业 ...
- 再谈多线程模型之生产者消费者(多生产者和单一消费者 )(c++11实现)
0.关于 为缩短篇幅,本系列记录如下: 再谈多线程模型之生产者消费者(基础概念)(c++11实现) 再谈多线程模型之生产者消费者(单一生产者和单一消费者)(c++11实现) 再谈多线程模型之生产者消费 ...
- 【九度OJ】题目1431:Sort 解题报告
[九度OJ]题目1431:Sort 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1431 题目描述: 给你n个 ...
- 【LeetCode】503. Next Greater Element II 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力解法 单调递减栈 日期 题目地址:https:/ ...
- hdu 5592 ZYB's Premutation(线段树优化)
设f_ifi是第ii个前缀的逆序对数,p_ipi是第ii个位置上的数,则f_i-f_{i-1}fi−fi−1是ii前面比p_ipi大的数的个数.我们考虑倒着做,当我们处理 ...
- centos 与虚拟机
一 创建虚拟机 1. 下载 centos7 和 vmware .centos的下载地址:见上一篇. 2.安装vmware ,具体安装过程,自行百度(一路点击确定) 3.打开vmware ,点击创建新的 ...
- MySQL与Oracle 差异比较之二函数
函数 编号 类别 ORACLE MYSQL 注释 1 数字函数 round(1.23456,4) round(1.23456,4) 一样:ORACLE:select round(1.23456,4) ...
- Orcale
oracleoracle中不存在引擎的概念,数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing).联机分析处理OLAP(On-Line An ...
- node.js安装及环境配置超详细教程【Windows系统安装包方式】
文章目录 Step1:下载安装包 Step2:安装程序 Step3:查看 Step4:环境配置 最后补充: Step1:下载安装包 https://nodejs.org/zh-cn/download/ ...
- Java Web程序设计笔记 • 【第6章 Servlet技术进阶】
全部章节 >>>> 本章目录 6.1 应用 Servlet API(一) 6.1.1 Servlet 类的层次结构 6.1.2 使用 Servlet API 的原则 6.1 ...