STM8 学习笔记15:SPI

2023-11-16

SPI

1 概述

SPI(串行外设设备接口,Serial Peropheral Interface)是一种高速的,全双工,串行、同步的通信总线。

2 特性

  1. 主或从操作
  2. 8 或 16 位传输帧格式
  3. 通信速率一般在 50MHz 以下
  4. 可编程的时钟极性和相位
  5. 可编程的数据顺序,MSB 在前或 LSB在前
  6. 可触发中断的专用发送和接收标志
  7. 支持可靠通信的硬件 CRC
    • 在发送模式下,CRC 值可以被作为最后一个字节发送
    • 在接受到最后一个字节时自动进行 CRC 出错检查

3 SPI是如何工作的?(SPI框图)

3.1 SPI 通信框图简化版

在这里插入图片描述

3.2 SPI 框图

在这里插入图片描述
① SPI相关引脚
MOSI(输出数据线)
MISO(输入数据线)
SCK(时钟)
NSS(片选)
② 数据发送和接受
与缓冲区、移位寄存器以及引脚相关
③ 时钟信号
SPI 时钟信号是通过 SPI_CR1 寄存器配置
④ 主控制逻辑
设计两个控制寄存器 SPI_CR1/2 用于配置 SPI 工作,SPI_SR 用于查看工作状态

3.3 SPI 移位操作

在这里插入图片描述
CLK在第一个边沿产生时,数据被传输到 MOSI/MISO 引脚,第二个边沿产生时,数据就被传输到移位寄存器。通过8个流程,1字节的数据就被交换。
Note

  1. 主机只向从机进行写操作,可以忽略接收到的从机数据。
  2. 主机要对从机进行读操作,需要发送一个空数据来引发从机发送数据。

4 SPI 工作模式

时钟极性(CPOL):没有数据传输时时钟线的空闲状态电平
0:SCK 在空闲状态保持低电平
1:SCK 在空闲状态保持高电平
时钟相位(CPHA):时钟线在第几个时钟边沿采样数据
0:SCK 的第一(奇数)边沿进行数据位采样,数据在第一个始终边沿被锁存
1:SCK 的第二(偶数)边沿进行数据位采样,数据在第二个边沿被锁存
在这里插入图片描述

5 相关寄存器

SPI模式,主模式

  1. SPI_CR1.MSTR 主设备选择(Master selection)
    作用:用于选择 SPI 的主从模式
    方向,双向全双工
  2. SPI_CR2.BOM 双向数据模式使能(Bidirectional data mode enable)
  3. SPI_CR2.RXONLY 仅接受(Receive only)
    作用:用于选择 SPI 的方向
    NSS,软件管理且 SSI 为 1,SPI 才能通信
  4. SPI_CR2.SSM 软件从设备管理(Software slave management)
    作用:用于使能软件管理通信
  5. SPI_CR2.SSI 内部从设备选择(Internal slave select)
    作用:用于决定 NSS 的电平
    数据传输顺序,8 位 MSB
  6. SPI_CR1.LSBFIRST 帧格式(Frame format)
    作用:选择 SPI 传输的帧格式
    SPI使能
  7. SPI_CR1.SPE SPI使能(SPI enable)
    波特率
  8. SPI_CR1.BR 波特率控制(Baud rate control)
    Note:当通信正在进行的时候,不能修改这些位
    SPI工作模式
  9. SPI_CR1.CPOL 时钟极性
  10. SPI_CR1.CPHA 始终相位
  11. SPI_SR.TXE 发送缓冲为空(Transmit buffer empty)
    作用:用于检查发送是否完成,当 TXE 位置 1 ,表示数据已经全部发送出去
  12. SPI_SR.RXNE 接收缓冲非空(Receive buffer not empty)
    作用:用于检查是否接收到数据,但 RXNE 位置 1 ,表示已经接受到数据。
  13. SPI_DR 数据寄存器

6 SPI 发送实验配置

  1. 配置 CLOCK、GPIO
  2. 配置 SPI 工作参数
  3. 使能 SPI
  4. SPI 发送
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM8 学习笔记15:SPI 的相关文章

  • 使用Docker compose部署SpringBoot项目

    我们使用Docker的时候 定义Dockerfile文件 然后使用docker build docker run等命令操作容器 对Docker不熟悉的可以前往查看中文文档 Docker文档 然而微服务架构的应用系统一般包含若干个微服务 每个
  • 6.webpack 代码编译工具 的使用 (实现模块化)

    6 1 关于webpack webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具 当 webpack 处理应用程序时 它会在内部从一个或多个入口点构建一个 依赖图 dependency graph 然后将你项目
  • 【剑指offer】面试题8:旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾 我们称之为数组的旋转 输入一个非递减排序的数组的一个旋转 输出旋转数组的最小元素 例如数组 3 4 5 1 2 为 1 2 3 4 5 的一个旋转 该数组的最小值为1 NOTE 给出的所
  • 海康威视RSTP摄像头视频数据从内网读取在web用HLS播放

    环境 海康威视录像机DS 7804NB K1 4P Ubuntu16 04 录像机内网地址192 168 100 99 一个摄像头接在4号口 32口以下通道号从33开始 摄像头内网地址 192 168 1 64 服务器内网地址192 168

随机推荐

  • SpringBoot中@Transactional注解不起作用的解决办法

    今天写完Service 想测试一下事务性 看是不是设置的自定义异常都能成功完成数据回滚 于是我写了一个方法 Override public boolean addNewUser UserInfo userInfo try int count
  • 云计算的未来:云原生架构和自动化运维的崭露头角

    文章目录 云原生架构 重新定义应用开发和部署 什么是云原生架构 为什么云原生架构重要 1 弹性和伸缩性 2 故障隔离 3 更快的交付 4 资源利用率 5 多云支持 云原生架构的实践 步骤 1 容器化 步骤 2 微服务 步骤 3 自动化运维
  • java设计模式——抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式产生的动机 为了更清晰地理解工厂方法模式 需要先引入两个概念 产品等级结构 产品等级结构即产品的继承结构 如一个抽象类是电视机 其子类有海尔电视机 海信电视机 TCL电视机 则抽象电视机与具体品牌的电视机之间构成了一个产品等级结
  • 电脑老是弹出vrvedp_m_VrvEdp_m.exe-应用程序错误。。。这弹窗每天弹个三十多次,烦死了,怎么消除?...

    满意答案 qingk0318 2014 05 06 采纳率 49 等级 8 已帮助 1862人 VrvEdp m exe北信源桌面管理软件想再用此软件又无法删除干净建议下载款unlocker软件小安装会鼠标右键菜单里先找北信源桌面管理软件V
  • SparkSession和sparkSQL

    一 概述 spark 有三大引擎 spark core sparkSQL sparkStreaming spark core 的关键抽象是 SparkContext RDD SparkSQL 的关键抽象是 SparkSession Data
  • javascript设计模式与六大原则

    设计模式的目的 提高代码的重用性 可读性 可靠性 可维护性 六大原则 单一职责原则 理解 不同的类具备不同的职责 各司其职 做系统设计是 如果发现有一个类拥有了两种职责 那么就要问一个问题 可以将这个类分成两个类吗 如果真的有必要 那就分开
  • 渣渣双非秋招以来第一份offer

    一 10月25日投递 boss上进行投递 二 10月27一面 1 在项目当中中如何运用的线程池 2 运用线程池的话可以解决什么问题 3 项目当中那些部分是运用了一些异步的操作 4 项目当中那些部分是运用了一些异步的操作 5 java并发编程
  • 程序员要如何提高数学水平

    I ve been working for the past 15 months on repairing my rusty math skills ever since I read a biography of Johnny von N
  • 2023企业数智化转型的正确打开方式是什么?他这样说(三)

    哈喽 又见面了大家 上两期我们说到了数据在数智化转型中的重要性以及监控在数智化转型中的角色 戳这里 一键回放精彩内容 2023企业数智化转型的正确打开方式是什么 他这样说 一 https mp csdn net mp blog creati
  • JMeter + Grafana + influxdb 性能监控平台

    平台架构 首先JMeter 异步写入数据到InfluxDB 然后InfluxDB存储数据 Grafana定时从InfluxDB读取数据 将数据在Grafana面板展示出来 由于同步写入对于性能的影响较大 所以JMeter支持异步写入 因此几
  • cmd怎么删除流氓软件?

    我们下载的软件可能会携带了流氓软件而不自知 不知道它们隐藏在哪个角落 想删又删不干净 有什么办法可以删除软件呢 可以试试cmd删除软件的方法 下面就来看看详细的操作 cmd如何删除流氓软件 1 用管理员方式运行命令行 在任务栏的搜索栏中输入
  • do while使用

    作为循环体 for和while用的比较多 但是do while没怎么用过 因为for和while很多情况是可以互换的 就是遍历而已 但是do while 不同 他是先do 再 while的 也就是说不管走到while哪一步怎么判断 都会先执
  • MFC之画笔与画刷的使用09

    1 画笔与画刷的使用 画笔和画刷的使用步骤 1 定义画家 已有 将形参注释去掉 2 定义画笔 或者画刷 并将交给画家 3 开始操作 案例 在绘图回调OnDraw中写 void CMFC FirstView OnDraw CDC pDC CM
  • MySQL ifnull()函数

    MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一 它接受两个参数 如果不是NULL 则返回第一个参数 否则 IFNULL函数返回第二个参数 两个参数可以是文字值或表达式 以下说明了IFNULL函数的语
  • Pytorch总结十三之 神经网络模型:批量归一化、ResNet、DenseNet

    Pytorch总结十三之 神经网络模型 ResNet DenseNet 本节将介绍批量归一化 batch normalization 层 它能让较深的神经网络的训练变得更加容易 在实战Kaggle比赛 预测房价里 我们对输入数据做了标准化处
  • 测试用例基础 12_02

    回顾 测试用例怎么写 测试点 不包含测试步骤 只有测试什么 只有测什么功能 预期的结果 为了提高作业的效率 测试用例只写测试点 直接写在Xmind 或者Excel 效率会比较高 面试的时候 就直接说测试点 是为了有限的时间 完整的测试用例
  • Ubuntu15.04 安装卡在logo界面不动

    Ubuntu15 04 安装卡在logo界面不动 进度点卡死不动 原因主要是双显卡 电源设置项默认不合理 导致安装失败 选择USB硬盘 uefi 进入到一个有四个选项的界面 分别是 1 try Ubuntu without install
  • ChatGPT颠覆的第三个行业-教育领域

    引言 随着人工智能技术的飞速发展 越来越多的行业受到了影响 ChatGPT作为一种领先的自然语言处理技术 在内容创作 在线客服等领域取得了显著的成果 如今 它正开始进入另一个领域 教育 本文将探讨ChatGPT如何改变教育行业 以及它为教育
  • 3D旋转 相册

    效果展示 代码逻辑
  • STM8 学习笔记15:SPI

    SPI 1 概述 SPI 串行外设设备接口 Serial Peropheral Interface 是一种高速的 全双工 串行 同步的通信总线 2 特性 主或从操作 8 或 16 位传输帧格式 通信速率一般在 50MHz 以下 可编程的时钟