[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 ...
随机推荐
- java 常用类库:操作系统System类,运行时环境Runtime
System类: System 类代表Java程序的运行平台,程序不能创建System类的对象, System类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法. Sy ...
- 10-2 bonding
创建bonding设备的配置文件 centos8 /etc/sysconfig/network-scripts/ifcfg-bond0 NAME=bond0 TYPE=bond DEVICE=bond ...
- VS2015常用的字体 和 插件
Inconsolata 字体 自己常使用 Inconsolata 作为代码字体, 阅读代码非常舒适. 其他插件 GoToDef.vsix , 查看 声明非常方便. (ctrl+鼠标左键) Viasfo ...
- 平衡二叉树(c++)实现(存在问题:插入节点后,问题:调整树的结构存在问题)
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 更新那时间: 22:13 03-02-2020 逻辑存在问题:插入节点后,调整数的结构不 ...
- Linux蓝牙库blueZ
1.blueZ 官网 2.zigbee 网络库zigbee(可用在smart home devices)
- 【LeetCode】846. Hand of Straights 解题报告(Python & C+)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- Code(hdu5212)
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- 1120 机器人走方格 V3
1120 机器人走方格 V3 基准时间限制:1 秒 空间限制:131072 KB N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走, ...
- Mysterious For(hdu4373)
Mysterious For Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 【jvm】02-手写自己的类加载器
[jvm]02-手写自己的类加载器 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺手点个赞.加个 ...