SPI外设简介

SPI外设简介

简介部分

  • 可配置8/16位数据帧、高位先行/低位先行

  • SPI和I2C都是高位先行,串口是低位先行

  • PCLK是外设时钟,APB2是72MHz、APB1是36MHz

  • SPI1的时钟频率比SPI2的大一倍

  • 如果需要快速大量传输数据,可以使用DMA数据转运,更高效

  • I2S协议主要是数字音频传输协议

框图介绍

在这里插入图片描述

  1. 左上角移位寄存器

    1. 右边的数据低位,一位一位的,从MOSI移出去

    2. 然后MISO的数据一位一位的移入到左边的数据高位

    3. 移位寄存器是一个右移的状态

    4. LSBFIRST标志位可以控制是低位先行还是高位先行

    5. 在这里插入图片描述

    6. 发送缓冲寄存器TDR和接收缓冲寄存器RDR占用同一个地址,统一叫做DR

    7. 发送数据先写入TDR,再转到移位寄存器发送,发送的同时接收数据,等到八位数据从移位寄存器发送完,移位寄存器也移入了8位通过MISO来的数据,接收到的数据转到RDR,置标志位RXNE为1,然后读取数据

    8. 数据寄存器和移位寄存器的配合,可以实现无延迟的连续传输

    9. 发送和接收的寄存器是公用的

  2. 波特率发生器

    1. 主要用来产生SCK时钟的

    2. 内部主要是一个分频器

    3. 经过分频器之后,输出到SCK引脚

非连续传输步骤
  1. 等待TXE为1

  2. 写入发送的数据到TDR

  3. 等待RXNE为1

  4. 读取RDR接收的数据

硬件SPI读写W25Q64编码步骤
  1. 直接在MySPI模块进行修改

  2. 首先SS引脚还是使用软件模拟,所以写SS的函数留着

  3. 然后下面是三个,软件读写SPI通信引脚的函数,可以删掉

  4. 之后,MySPI初始化这里可以全都删掉,替换为SPI外设的初始化、(保留SS引脚的gpio初始化函数)

  5. 软件写SS引脚产生起始和停止信号的可以留着

  6. 之后,交换字节函数里的内容全都删掉,这样软件SPI操作时序的部分,就删完了

  7. 接着写上硬件SPI的代码就好

  8. 硬件SPI的代码其实就两个部分

  9. 第一部在初始化函数里,写上SPI初始化的代码

  10. 第二部分在交换一个字节函数里,写上SPI外设操作时序,完成交换一个字节的流程

在这里插入图片描述

  1. 第一步开启时钟、开启SPI和GPIO的时钟

  2. 第二部初始化GPIO,SCK和MOSI配置为复用推挽输出、MISO是硬件外设的输入信号,配置为上拉输入(因为输入设备可以有多个所以不存在复用输入这个东西,普通GPIO口可以输入,外设也可以输入)

  3. 最后是SS引脚,SS是软件控制的输出引脚,所以配置为通用推挽输出,这就是GPIO口的初始化配置

  4. 第三步配置SPI外设,使用一个结构体选参数即可,调用SPI_Init

  5. 调用SPI_Cmd给SPI使能即可

    在这里插入图片描述

  6. 初始化之后,惨老这个框图,执行运行控制的代码,从而产生交换字节的时序

    1. 首先等待Txe为1

    2. 使用库函数写入DR

    3. 通过发送ByteSend数据,会通过MOSI一位一位的移出去,在MOSI线上,就会自动产生这个发送的时序波形,由于是非连续传输,所以时序产生的这段时间,就不必把下一个数据放到Tdr等着,这段时间直接死等过去就行了,当MOSI移位完成,证明接收移位也完成了,MISO也移入了一个字节的数据到RXE,会置标志位RXNE标志位

    4. 等待RXNE为1,表示收到一个字节,同时也表示发送时序产生完成了

    5. 读取RDR,调用库函数读取RDR

      1. 在这里并不需要向软件一样,手动给SCK、MOSI置高低电平,也不用关心怎么把数据一个一个的取出来,这些工作硬件电路会自动帮我们完成

      2. 注意事项:

        1.这里的硬件SPI,必须是发送,同时接收,要想接收必须要先发送,因为只有给TDR写东西,才会触发时序的产生,如果不发送只调用接收的函数,时序是不会动的

        2.TXE和RXNE是不是会自动清除的问题,上面的图上写的是,TXE标志由硬件置位,并由软件清除、RXNE也是,这个由软件清除就比较迷惑,是不是要求我们,在标志位置1之后,还需要我们手动调用清除标志位的函数,实际上 这个并不需要我们手动清除,手册上状态标志那一节有写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装VMware ESXi虚拟机系统

简介:ESXi是VMware公司开发的一款服务器虚拟化操作系统。它能够在一台物理服务器上运行多个虚拟机,每个虚拟机都可以独立运行操作系统和应用程序,而且对硬件配置要求低,系统运行稳定。 准备工具: 1.8G或者8G以上容…

【PDF-XSS攻击】Java项目-上传文件-解决PDF文件XSS攻击

文章目录 背景解决pdfbox依赖控制器代码PdfUtils工具类 验证最后源码参考 背景 上传xss-pdf造成存储型xss因为在浏览器直接预览的PDF,而不是预览,所以安全部门认为会有XSS漏洞 解决 安全部门修复建议 1、根据白名单的标签和属性对数据进行过滤&#…

金三银四面试题(十七):MySQL面试都问什么(2)

今天我们继续盘点那些高频的MySQL面试题。 说说InnoDB与MyISAM的区别 InnoDB 支持事务,MyISAM 不支持,对于InnoDB 每一条SQL 语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL 语言放在begin 和comm…

Java 二叉数(1)

一、认识树 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 有一个特殊的…

IDEA中的Debug功能介绍

说明:本文介绍IDEA中的Debug功能,基于2023.2(Ultimate Edition)版本 简单介绍 首先,在程序需要停止的所在行号上,鼠标左键,可设置一个断点,是一个红色圆点标志,表示程序…

2024年腾讯云优惠券领取步骤使用教程详解

随着云计算技术的快速发展,越来越多的企业和个人开始选择使用云服务来提升自己的业务能力和工作效率。腾讯云作为国内领先的云服务提供商,其优质的服务和丰富的资源吸引了大量的用户。为了回馈广大用户,腾讯云经常会推出各种优惠活动&#xf…

【b站李同学的Lee】2 Git进阶【gitgithub】入门教程,必学!

课程地址:【【git&github】入门教程,必学!】 https://www.bilibili.com/video/BV1cE411G7yc/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2 Git进阶 2.1 分支 2.1.1 分支细分 2.1.2 分支命令 1查看…

LeetCode-热题100:148. 排序链表

题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入: head [4,2,1,3] 输出: [1,2,3,4] 示例 2: 输入: head [-1,5,3,4,0] 输出: [-1,0,3,4,5] 示例…

unity学习(83)——细节名称和血条

眼中有细节,学习的过程才能平稳! 1.游戏更新时把名字也更新 代码如下: 效果如下: 2.因为是第三人称,从背后看,所以名称应该水平对称,翻转一下!rotate y180 游戏内效果如下&#xf…

升级xcode15 报错Error (Xcode): Cycle inside Runner

升级xcode15后报错 Could not build the precompiled application for the device. Error (Xcode): Cycle inside Runner; building could produce unreliable results. This usually can be resolved by moving the shell script phase Thin Binary so that it runs before th…

Python程序设计 列表

教学案例八 列表 1. 计算并显示斐波那契数列 输入n,计算并显示斐波那契数列前n项.一行打印5项,每项显示宽度为6 什么是斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列、 因数学家莱昂纳多斐波那契&#xff…

FreeRTOS任务切换学习

FreeRTOS任务切换学习 所谓任务切换,就是CPU寄存器的切换。假设当由任务A切换到任务B时,主要分为两步: 1:需暂停任务A的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场; 2&am…

【无标题】系统思考—心智模式

“直到你使无意识变为有意识,它将指导你的生活并且你会称之为命运。”—卡尔荣格 心智模式深藏于我们内心之中,它潜移默化地影响着我们对世界的理解和判断。往往这些影响是如此隐蔽,以至于我们自己都未必察觉到是什么在驱动我们的选择、决策…

【Entity Framework】聊聊EF中键

【Entity Framework】聊聊EF中键 文章目录 【Entity Framework】聊聊EF中键一、概述二、配置主键2.1 约定配置主键2.2 单个属性配置为实体主键2.3 组合主键 三、主键名称四、键类型和值五、备用键 一、概述 键用作每个实体实例的唯一标识符。EF中的大多数实体都有一个键&#…

VPP 负载均衡测试代码

1. 均衡的测试思想和流程说明。 先说一下理论, 然后后边才知道 代码逻辑。 调试了两天,这个代码终于通了。 由于时间关系, 画了一个粗略的图。另外这个代码只是流程通了,不过要帮助理解负载均衡我认为已经足够了。 下面是windo…

QT Creator概览

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:QT❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、Qt Creator 概览 ①:菜单栏 ②:模式选择 ③:构建套件选择器…

【Keil5-Debug和发布版本配置】

Keil5-Debug和发布版本配置 ■ Keil5-Debug和发布版本配置■ 一:sct文件 sct文件配置■ 二:发布版本不需要在 C/C,Asm,Linker,中添加 CMDDEBUG 宏定义。■ 三:Debug版本需要在Linker添加 --pd"-DCMDDE…

【MySQL数据库 | 第二十四篇】Limit语句的性能问题和调优策略

前言: MySQL作为最流行的关系型数据库管理系统之一,被广泛应用于各种规模和类型的应用程序中。其强大的功能和灵活的查询语言使得开发人员能够高效地执行各种数据操作和分析。 然而,在处理大量数据或复杂查询时,一些开发人员可能…

Linux网卡:连接虚拟与现实的桥梁

在介绍Linux网卡之前,让我们先迈入时光机🕰️,回到1980年代末期,互联网正在逐步从一个科研网络向公众网络转变,Linux——一个自由和开源的操作系统诞生了🐧。Linux的出现,对于计算机科学领域来说…

非线性滤波相位解缠算法

相位解缠是InSAR数据处理流程中较为关键的步骤,同时也是地表高程模型重建 过程中的主要误差来源之一。迄今为止,针对干涉图的相位解缠问题,已经提出了各 种各样的相位解缠算法,这些算法大致可以分为以下几类:①路径跟踪…