STM32之硬件SPI

news2025/4/21 14:49:14

在这里插入图片描述
SPI1和SPI2挂载的总线不一样,SPI1的时钟频率的比SPI2的大一倍。在这里插入图片描述
核心部分是移位寄存器,数据一位一位的移到MOSI,同理,移位寄存器也一位一位的从MISO接收数据,LSBFIRST控制位控制高位先行还是低位先行。移位寄存器左边交叉箭头是STM32作为从机的电路,接收缓冲区RDR和发送缓冲区TDR,RDR读出,TDR写入。
具体流程就是:
如果我们需要连续发送一批数据,第一个数据写入TDR,当移位寄存器没有数据移位时,TDR的数据就会立刻转入移位寄存器,开始移位,转入时会置状态寄存器的TXE为1,表示发送寄存器空,当我们检查发送寄存器空的时候,下一个数据就可以提前写入TDR等待,一旦上一个数据发完,下一个数据就可以立刻跟进,实现不间断的连续传输,然后移位寄存器这里,一旦有数据过来了,他就会自动产生时钟,将数据移出去,在移出去的过程中,MISO的数据也会移入,一旦数据移出完成,数据移入也就完成,此时移入的数据就会整体的从移位寄存器转入到接收缓冲区RDR,这个时刻会置状态寄存器的RXNE为1,表示接收寄存器非空,当我们检查RXNE置1后,就要尽快的把数据从RDR读出来,在下一个数据到来之前,读出RDR,就可以实现连续接收,否则下一个数据已经收到了,上一个数据还没从RDR中读出,那RDR的数据就会被覆盖,就不能实现连续的数据流了。

波特率发生器主要用来产生SCK时钟的,他内部主要就是一个分频器,输入时钟时PCLK,72M或者36M,经过分频器后,输出到SCK引脚,此时他和移位寄存器同步,每产生一个周期的时钟,移入移出一个bit,然后右边CR1寄存器的三个位BR0,BR1,BR2,用来波特率发生器内部的分频系数。

SPE是SPI使能,MSTR配置主从模式,CPOL,CPHA用来选择SPI的4种模式,SPI_SR状态寄存器TXE发送寄存器空,RXNE接收寄存器非空,SPI_CR2寄存器就是一些使能位了,比如中断使能,DMA使能等。

NSS实现多主机切换,当配置为输出引脚时,输出电平告诉别的设备自己作为主机,配置成输入则作为从机,当SSOE=1时,NSS作为输出引脚,并在当前设备变为主设备时,给NSS输出低电平,当主机结束后,SSOE清零,NSS变为输入,此时输入信号到达数据选择器,由SSM位决定选择哪一路,选择0的时候是硬件NSS模式,如果NSS是低电平,那本设备就只能作为从机,选择下面的1时就是软件管理NSS输入,此时NSS是1还是0,由SSI决定。在这里插入图片描述
在这里插入图片描述
示例是SPI模式3,流程:
SS置低电平开始时序,TEX为1,表示TDR空,可以写入数据开始传输,此时软件写入0xf1,写入之后TDR变为0xf1,同时TXE变为0,表示TDR已经有数据了,此时TDR是等候区,移位寄存器才是真正的发送区,移位寄存器刚开始没有数据,所以在等候区TDR的F1,就会立刻转入移位寄存器,开始发送,转入瞬间,置TXE标志为1,表示发送寄存器空,然后移位寄存器有数据了,波形就自动生成,数据转入移位寄存器之后,数据F1的波形就开始产生了,在移位产生F1波形的同时,等候区TDR是空的,为了移位完成时,下一个数据能不间断的跟随,我们就要提早把下个数据写入TDR里等待,所以第二步的操作是,写入F1之后,软件等待TXE=1,一旦TDR空了我们就写入0xf2,之后的发送流程同理,发送数据完成后TXE一直是1,TXE=1一段时间以后F3的波形才能完整发送,数据发送完以后,BSY标志位由硬件清零。这才表示波形发送完。这就是发送的了流程。
接受的流程同步与发送的流程,不同的是置RXNE为1。
此模式的流程:发送数据1,发送数据2,接收数据1,发送数据3,接收数据2,发送数据4,接收数据3。

在这里插入图片描述
连续比较复杂,一般用非连续传输。非连续传输的缺点是传输速度相对慢一些。
此为SPI模式3:
SCK默认高电平,发送数据时,检测到TEX=1,TDR为空,就软件写入0xf1,此时TDR的值为F1,TXE变为0,目前移位寄存器也是空,所以F1会立刻转入移位寄存器开始发送,波形产生,并且TXE置回1,一直等待RXNE置1后即接受第一字节完成,先把第一个接收的数据读出来,再写入下个字节数据。之后数据2发送,同理等待数据2接收完成后,写入数据3。数据3时序结束后,最后再接收数据3置换的数据。
第一步:等待TXE为1
第二步:写入发送的数据到TDR
第三步:等待RXNE为1
第四步:读取RDR接收的数据
之后交换第二个字节,重复这四步。

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

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

相关文章

【网络协议安全】任务10:三层交换机配置

CSDN 原创主页:不羁https://blog.csdn.net/2303_76492156?typeblog三层交换机是指在OSI(开放系统互连)模型中的第三层网络层提供路由功能的交换机。它不仅具备二层交换机的交换功能,还能实现路由功能,提供更为灵活的网…

依托大数据实验室建设,培育创新人才:数据科学与大数据技术专业人才培养实践

近年来,得益于全球大数据产业政策扶持与数字经济蓬勃发展,大数据市场呈现迅猛增长态势。国家层面相继出台《“数据要素”三年行动计划(2024—2026年)》《数字中国建设整体布局规划》等政策,旨在激发产业创新活力&#…

如何使用 CSS 实现黑色遮罩效果

最近在工作中遇见了一个需求,鼠标经过盒子出现黑色遮罩,遮罩中有相关的编辑按钮,点击以后,进行图片上传并且展示,由于当时没有思路,思考了好久,所以在完成开发后进行总结,使用的技术…

ChatGPT课件分享(37页PPT)

资料解读:ChatGPT课件分享 详细资料请看本解读文章的最后内容。 近年来,人工智能技术的迅猛发展引发了全球范围内的广泛关注,尤其是以OpenAI为代表的公司在自然语言处理领域的突破性进展,彻底改变了人机交互的方式。本文将详细解…

无人机扩频技术对比!

一、技术原理与核心差异 FHSS(跳频扩频) 核心原理:通过伪随机序列控制载波频率在多个频点上快速跳变,收发双方需同步跳频序列。信号在某一时刻仅占用窄带频谱,但整体覆盖宽频带。 技术特点: 抗干扰…

C语言_数据结构总结4:不带头结点的单链表

纯C语言代码,不涉及C 0. 结点结构 typedef int ElemType; typedef struct LNode { ElemType data; //数据域 struct LNode* next; //指针域 }LNode, * LinkList; 1. 初始化 不带头结点的初始化,即只需将头指针初始化为NULL即可 void Init…

几种常见的虚拟环境工具(Virtualenv、Conda、System Interpreter、Pipenv、Poetry)的区别和特点总结

在 PyCharm 中创建虚拟环境是一个非常直接的过程,可以帮助你管理项目依赖,确保不同项目之间的依赖不会冲突。 通过 PyCharm 创建虚拟环境 打开 PyCharm 并选择或创建一个项目。 打开项目设置: 在 Windows/Linux 上,可以通过点击…

Ubuntu安装问题汇总

参考文章: 【Ubuntu常用快捷键总结】 【王道Python常用软件安装指引】 1. 无法连接虚拟设备 sat0:0 【问题】:出现下图所示弹框。 【问题解决】: 点击 “否” 。 点击左上角的 “虚拟机” → “设置…” → “CD/DVD (SATA)” ,…

Ceph(1):分布式存储技术简介

1 分布式存储技术简介 1.1 分布式存储系统的特性 (1)可扩展 分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性: 节点…

从0开始的操作系统手搓教程43——实现一个简单的shell

目录 添加 read 系统调用,获取键盘输入 :sys_read putchar和clear 上班:实现一个简单的shell 测试上电 我们下面来实现一个简单的shell 添加 read 系统调用,获取键盘输入 :sys_read /* Read count bytes from the file pointed to by fi…

【Spring】基础/体系结构/核心模块

概述: Spring 是另一个主流的 Java Web 开发框架,该框架是一个轻量级的应用框架。 Spring 是分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect…

01 音视频知识学习(视频)

图像基础概念 ◼像素:像素是一个图片的基本单位,pix是英语单词picture的简写,加上英 语单词“元素element”,就得到了“pixel”,简称px,所以“像素”有“图像元素” 之意。 ◼ 分辨率:是指图像…

vue3自定义hooks遇到的问题

问题 写了一个输入查询参数和url返回加载中状态、请求方法、接口返回列表的hooks,出现的结果是只有请求方法有效,加载状态无效,接口返回了数据,页面却不显示数据。 代码如下 只展示部分关键代码 import { ref, toRefs, toRef, o…

liunx磁盘挂载和jar启动命令

一、磁盘挂载 查看历史磁盘挂载命令:history | grep mount 查看所有挂载硬盘命令:mount 磁盘挂载命令:mount -t cifs -o usernamesh**,passwordP!ss**** //192.168.1.2/attachmentfilesShare2.2/pdfCert /home/nybzg/cnfai1/pdfCert 二、j…

gbase8s rss集群通信流程

什么是rss RSS是一种将数据从主服务器复制到备服务器的方法 实例级别的复制 (所有启用日志记录功能的数据库) 基于逻辑日志的复制技术,需要传输大量的逻辑日志,数据库需启用日志模式 通过网络持续将数据复制到备节点 如果主服务器发生故障,那么备用服务…

如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统

我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户。 随时近来 AI 大模型的火热,越来越多的客户,问…

【AI智能体报告】开源AI助手的革命:OpenManus深度使用报告

一、引言:当开源智能体走进生活 2025年3月,MetaGPT团队用一场"开源闪电战"改写了AI Agent的竞争格局。面对商业产品Manus高达10万元的邀请码炒作,他们仅用3小时便推出开源替代品OpenManus,首日即登顶GitHub趋势榜。 …

DeepSeek+Maxkb+Ollama+Docker搭建一个AI问答系统

DeepSeekMaxkbOllamaDocker搭建一个AI问答系统 文章目录 DeepSeekMaxkbOllamaDocker搭建一个AI问答系统前言一、创建同一内网的网络二、拉取两个镜像三、启动Ollama以及调试Maxkb4.Maxkb创建一个应用并建立知识库5、应用效果总结 前言 我觉得只要是使用Docker技术,…

江科大51单片机笔记【12】DS18B20温度传感器(上)

写在前言 此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识 在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…

P8662 [蓝桥杯 2018 省 AB] 全球变暖--DFS

P8662 [蓝桥杯 2018 省 AB] 全球变暖--dfs 题目 解析讲下DFS代码 题目 解析 这道题的思路就是遍历所有岛屿,判断每一块陆地是否会沉没。对于这种图的遍历,我们首先应该想到DFS。 代码的注意思想就是,在主函数中遍历找出所有岛屿&#xff0c…