SPI外设简介

news2024/11/24 9:46:29

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.coloradmin.cn/o/1583299.html

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

相关文章

Chrome谷歌下载入口

​hello,我是小索奇 发现好多人说谷歌浏览器在哪里下载呀,哪里可以找到? 你可能会心想,一个浏览器你还不会下载啊? 还真是,有很多伙伴找不到下载入口,为什么呢? Bing进行搜索&am…

2、java语法之循环、数组与方法(找工作版)

写在前面:整个系列文章是自己学习慕课相关视频,进行的一个总结。文章只是为了记录学习课程的整个过程,方便以后查漏补缺,找到对应章节。 文章目录 一、Java循环结构1、while循环2、do-while循环3、for循环4、嵌套循环5、break语句…

【技术揭秘】爬取网站或APP应用的几种常用方案:RPA、抓包工具、Python爬虫,你了解多少?

本来准备空闲之余尝试用RPA软件抓取数据,【AIRPA系列】1、利用AIRPA提升工作效率 应用场景 , 最近工作项目有点忙, RPA实操系列可能会晚点了(自己真正实操后再写,copy别人的没啥意思)。这里简单整理下爬取…

Docker快速上手及常用命令速查

Docker快速上手 安装 在ubuntu上安装docker: sudo apt-get install docker docker -v #查看版本在centos7上安装docker:(docker在YUM源的Extras仓库中) yum install docker systemctl start dockerdocker常用命令速查 #查看docker信息 docker info #查看本地镜…

【面试题】redis在工作中的使用场景有哪些?

前言:在实际工作中,Redis作为一种高性能的内存数据库和缓存系统,可以应用于多种场景,同时在面试过程中也经常被问到类似的问题,我们经常会被问的一脸懵逼,那今天我们就来总结一下redis的一些使用场景。 数据…

Linux--进程间的通信-匿名管道

进程间的通信 进程间通信(IPC,Interprocess Communication)是指在不同进程之间传输数据和交换信息的一种机制。它允许多个进程在同一操作系统中同时运行,并实现彼此之间的协作。 进程间通信方式: 管道(Pi…

前端开发中地图定位与距离计算的应用实践

前端开发中地图定位与距离计算的应用实践 在前端开发中,地图功能的应用日益广泛,无论是用户位置的定位、目标距离的计算,还是地址的解析与展示,地图都发挥着不可替代的作用。本文将重点介绍前端开发中实现地图定位、距离计算以及…

电销卡呼叫必须录音吗

在现代的销售策略中,电话销售(电销)扮演着至关重要的角色。为了提高电销效率和质量,许多企业采用了电销卡来进行日常的电话营销活动。电销卡通常指的是专为电话销售设计的电话号码或线路,它们通常具备一些特殊的功能&a…

agi入门-大模型开发基础

AGI(Artifical General Inteligence)的到来还有多久? 乐观预测:明年主流预测:3-5年悲观预测:10年 AGI时代,AI无处不在,相关从来者将如何分? AI使用者:使用别人开发的AI产品AI产品…

精准识别更安全,横扫六大手指难题的鹿客指脉锁S6 Max来了

极致的自然动作、极致的精准识别、识别时间600毫秒……在4月10日鹿客指脉锁S6 Max发布会上,高密度的关键词让关注发布会的所有人都意识到,下一代智能锁真的来了。 鹿客也将新品S6 Max称为“行业内、搭载全新一代指脉技术的革新之作”。 1、十年回答&…

idea中输入法被锁定如何清除

今天遇到一个问题?idea中输入法被锁定了,无论怎么切换输入法,切换中英文,在idea中输出的均为英文内容,该如何解决呢?(idea官网:JetBrains: 软件开发者和团队的必备工具) …

VPP 负载均衡测试代码

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

three.js尝试渲染gbl模型成功!(三)

参照教程:https://cloud.tencent.com/developer/article/2276766?areaSource102001.5&traceId88k805RaN_gYngNdKvALJ (作者:九仞山) 通过最近两天查three.js入门教程了解到 这玩应支持包括 .obj、.gltf等类型的模型结构。 g…

【vue/uniapp】使用 smooth-signature 实现 h5 的横屏电子签名

通过github链接进行下载,然后代码参考如下,功能包含了清空、判断签名内容是否为空、生成png/jpg图片等。 签名效果: 预览效果: 下载 smooth-signature 链接:https://github.com/linjc/smooth-signature 代码参考&a…

超图SuperMap-Cesium,地形图层,可以渲染一个或多个地形(地形可缓存DEM,TIN方式),webGL代码开发(2024-04-08)

1、缓存文件类型TIN格式,TIN的地形sct只能加一个 const viewer new Cesium.Viewer(cesiumContainer); viewer.terrainProvider new Cesium.CesiumTerrainProvider({isSct: true, // 是否为iServer发布的TIN地形服务,stk地形设置为falserequestWaterMask : true,…

MySQL学习笔记2——基础操作

基础操作 一、增删改查1、添加数据2、删除数据3、修改数据4、查询语句 二、主键三、外键和连接1、外键2、连接 一、增删改查 1、添加数据 INSERT INTO 表名[(字段名[,字段名]…)] VALUES (值的列表); --[]表示里面的内容可选添加数据分为插入数据记录和插入查询结果 插入数据…

[通俗易懂]《动手学强化学习》学习笔记2-第2、3、4章

文章目录 前言小总结(前文回顾)第二章 多臂老虎机2.2.2形式化描述 第三章 马尔可夫决策过程3.6 占用度量 代码3.6 占用度量 定理2 第四章 动态规划算法4.3.3 策略迭代算法 代码 总结 前言 参考: 《动手学强化学习》作者:张伟楠&a…

JR-SMD201-P便携式网络解码器

详细介绍: JR-SMD201-P便携式网络解码器采用1/2U设计,支持AVS/H.265/H.264/MPEG2解码,支持IP输入,支持1080P/1080I/720P/576I/480I多种分辨率,支持DRA/AC3/EAC3/AAC/MPEG等音频。 产品特点 支持输入方式IP 接口丰富&a…

scan纯享代码 java

scan纯享代码 java 1 scan用法2 next3 nextLine 1 scan用法 在录入中间有回车的字符串的时候,不要使用next()和nextLine()的配合!! scan用法 Scanner scannernew Scanner(System.in); String…

kvm基础命令

前言 一、基础命令 1.虚拟机查看 2.虚拟机开启与关闭 3.虚拟机删除 4.查看虚拟机的配置 5.配置文件重定向 6.命令行登录虚拟机 二、调整虚拟机磁盘大小 三、虚拟机创建快照 四、virsh console报错 总结 前言 今天我们分享一下如何使用kvm基础命令。 一、基础命令 1.虚拟机查看…