[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 ...
随机推荐
- docker启动WARNING:IPv4 forwarding is disabled. Networking will not work.
docker启动容器报错IPv4 forwarding is disabled. Networking will not work. [root@localhost ~]# docker run -p ...
- JAVA获取当前日期指定月份后(多少个月后)的日期
环境要求:使用jdk1.8 package com.date; import java.text.ParseException; import java.text.SimpleDateFormat; ...
- 【LeetCode】1431. 拥有最多糖果的孩子 Kids With the Greatest Number of Candies
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...
- C. Andryusha and Colored Balloons
C. Andryusha and Colored Balloons time limit per test 2 seconds memory limit per test 256 megabytes ...
- LeetCode1240铺瓷砖
题目 n*m的矩阵,只用正方形铺.求最少正方形个数. n,m<=13 思路 贪心: 加入是最大的正方形,显然行不通,比如n=11,m=13.那么贪心策略是1个11,其余是大小为2的正方形5个,大 ...
- Second Order Optimization for Adversarial Robustness and Interpretability
目录 概 主要内容 (4)式的求解 超参数 Tsiligkaridis T., Roberts J. Second Order Optimization for Adversarial Robustn ...
- 离线版centos8环境部署迁移监控操作笔记
嗨咯,前两天总结记录了离线版centos8下docker的部署笔记,今天正好是2021年的最后一天,今天正好坐在本次出差回家的列车上,车上没有上面事做,索性不如把本次离线版centos8环境安装的其他 ...
- JAVA获取上下行网速
JAVA获取上下行网速 package com.iecas.zwterminalstate.util;import java.io.BufferedReader;import java.io.IOEx ...
- FastAPI快速查阅
官方文档主要侧重点是循序渐进地学习FastAPI, 不利于有其他框架使用经验的人快速查阅 故本文与官方文档不一样, 并补充了一些官方文档没有的内容 安装 包括安装uvicorn $pip instal ...
- Sentry 企业级数据安全解决方案 - Relay 配置选项
Relay 的配置记录在文件 .relay/config.yml 中.要更改此位置,请将 --config 选项传递给任何 Relay 命令: ❯ ./relay run --config /path ...