【STM32 CubeMX】SPI层次结构SPI协议与SPI控制器结构

文章目录

  • 前言
  • 一、SPI 程序层次
    • 1.1 硬件原理图
    • 1.2 硬件框图
    • 1.3 软件层次
  • 二、SPI协议
    • 2.1 硬件连线
    • 2.2 如何访问SPI设备
    • 2.3 SPI 框图
  • 总结


前言

随着嵌入式系统的迅猛发展,STM32系列微控制器在各种应用中得到广泛应用。在嵌入式系统设计中,串行外设接口(SPI)是一种常见且重要的通信协议。为了更便捷地配置和使用SPI,STMicroelectronics提供了一款强大的工具——STM32 CubeMX。本文将着重介绍STM32 CubeMX中SPI的层次结构、SPI协议以及SPI控制器的结构。


一、SPI 程序层次

1.1 硬件原理图

以 SPI 接口的 Flash 为例,它跟主控的连接图如下:
在这里插入图片描述
其中DI为SPI设备发给主控的。SCK为时钟(所以SPI协议是一种同步协议)
主控发出。DO为主控发送给SPI设备的,CS为片选引脚,我们可以通过CS片选引脚来选中不同的SPI设备,可以实现一主多从。

1.2 硬件框图

我们会编写程序通过SPI控制器来操作Flash,SPI来帮我们传递数据。
在这里插入图片描述

1.3 软件层次

要操作 Flash,涉及这几个层次的程序:
① 应用程序:我来决定“在哪个位置、读写什么数据”
② Flash 驱动:我知道发送什么格式的 SPI 数据才能读、写、擦除 Flash
③ SPI 控制器驱动(HAL):我可以发送 SPI 数据

在这里插入图片描述

二、SPI协议

2.1 硬件连线

SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在
1980 前后提出的一种全双工同步串行通信接口,它用于 MCU 与各种外围设备以串行方式进
行通信以交换信息,通信速度最高可达 25MHz 以上。

SPI 接口主要应用在 EEPROM、FLASH、实时时钟、网络控制器、OLED 显示驱动器、AD
转换器,数字信号处理器、数字信号解码器等设备之间。

SPI 通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,
MOSI),一条主设备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信
号(Serial Clock,SCLK),一条从设备使能选择(Chip Select,CS)。
SPI 可以一个主机连接单个或多个从机,每个从机都使用一个引脚进行片选,物理连
接示意图如图所示:
在这里插入图片描述
我们可以通过把SCLK时钟,输入和输出所有从机共用一根线,通过CS引脚(片选引脚)来区分发送和接收哪个设备。
这样就可以使用I2C的一主多从

2.2 如何访问SPI设备

首先,使能片选引脚,在片选引脚有用的期间再去访问
那怎么发数据和读数据呢?
假设主控要发送0x56(二进制:0101 0110)给Flash,时序如下:
在这里插入图片描述
首先发送CS片选信号,选中他,在每个时钟周期传输一位。第一个时钟周期传递最高位。然后其他的位就接着传输。

在一开始的时候,这个SCK是高电平还是低电平?
这是可以设置的。(CPOL)

传输数据时,是在第一个跳边缘("跳边缘"通常指的是在数字信号中的变化,特别是从低电平到高电平或从高电平到低电平的变化。)传输数据还是在第二个跳边缘传输数据?
这也是可以设置的(CPHA)

通过上面的CPOL和CPHA的组合,可以组合成4个SPI不同的模式
在这里插入图片描述
比如说我们可以组合成下面这个时钟时序图:
在这里插入图片描述
当CPHA为1时在第二个跳边缘传输数据
在这里插入图片描述
当CPHA为1,CPOL不同时,可以观察到,他们的初始电平分别为高电平和低电平

无论哪种模式,我们都可以同时发送和同时接收8位数据

2.3 SPI 框图

在我们实际编程中我们是不需要这样去控制引脚的
我们编写的程序将会通过内部的SPI控制器去访问外部的SPI设备,这个SPI控制器帮我们实现时序,进行读写。

SPI控制器框图:
在这里插入图片描述

  1. 当我们要操作SPI的时候,我们要去设置他的模式:时钟平时是什么电平,在第几个跳边缘传输数据
  2. 我们需要设置时钟的频率
  3. 我们可以去写数据了
    比如上面的框图,他有SPI控制寄存器2,控制寄存器1,我们可以设置控制寄存器1的时钟平时是什么电平,在第几个跳边缘传输数据:
    在这里插入图片描述

然后我们就可以通过写/读缓冲区来得到数据了
在这里插入图片描述


总结

STM32 CubeMX作为一款强大的开发工具,为嵌入式系统设计提供了便利。在SPI层次结构的配置中,CubeMX提供了直观而灵活的界面,使得用户能够轻松定制SPI通信的各种参数。同时,SPI协议和SPI控制器结构的详细配置也为开发者提供了更高的灵活性和控制权。通过深入了解STM32 CubeMX中SPI的层次结构、协议和控制器结构,开发者能够更加高效地设计和实现复杂的嵌入式系统。

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

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

相关文章

Vue练习1:组件开发1(头像组件)

样式预览 注释代码 <template><div class"img-box":style"{ //动态style必须为对象width: size rem,height: size rem}"><imgclass"avatar-img":src"url" //动态url/></div> </templ…

MATLAB环境下使用二维高分辨时频分析方法提取波状分量

MATLAB环境下使用二维高分辨时频分析方法提取波状分量&#xff08;分离混合地震数据&#xff09;。 为了得到更高的时频分辨率&#xff0c;近年来涌现出了大量的新的时频分析方法。有些以线性和非线性时频分析为基础&#xff0c;有些则另辟蹊径&#xff0c;比如Hilbert-Huang变…

由斐波那契数列探究递推与递归

斐波那契数列定义&#xff1a; 斐波那契数列大家都非常熟悉。它的定义是&#xff1a; 对于给定的整数 x &#xff0c;我们希望求出&#xff1a; f ( 1 ) f ( 2 ) … f ( x ) f(1)f(2)…f(x) f(1)f(2)…f(x) 的值。 有两种方法,分别是递推(迭代)与递归 具体解释如下图 备注…

C++入门学习(二十九)goto语句

在C中&#xff0c;goto语句是一种控制流语句&#xff0c;用于无条件地转移到程序中指定的行。goto语句的使用通常是不推荐的&#xff0c;因为它可能导致代码结构变得混乱、不易理解和维护。然而&#xff0c;在某些特殊情况下&#xff0c;goto语句可能是一种有效的解决方法。 示…

vue-vuex(七)

阅读文章你可以收获&#xff1a; 1 了解什么是vuex 2 知道如何在vue项目中集成vuex 3 知道vuex由什么组成&#xff0c;并如何使用 vuex概述 1. 是什么&#xff1a;vuex 是一个 vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;vuex 是一个插件&#xff0…

初识最短路径

一.最短路径的介绍 最短路径是图论和网络分析中一个重要的概念&#xff0c;它指的是在一个图或网络中连接两个节点或顶点的路径中&#xff0c;具有最小权重总和的路径。这个权重可以表示为路径上边或弧的长度、耗费、时间等&#xff0c;具体取决于问题的背景和应用场景。 如果你…

PHP服务商微信支付分支付(需确认模式)

//查询支付分是否支付 public function serviceorderServiceorder($out_order_no) {$setting [];$service_id $setting[service_id];$sub_mchid $setting[mchid];$ps "/v3/payscore/partner/serviceorder?service_id${service_id}&sub_mchid${sub_mchid}&out…

【自然语言处理】实验3,文本情感分析

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢…

Java 学习和实践笔记(12)

这个就比较有意思了&#xff01;所有的事情&#xff0c;拆分完之后&#xff0c;都有且只有这三种状态流程&#xff01; //TIP To <b>Run</b> code, press <shortcut actionId"Run"/> or // click the <icon src"AllIcons.Actions.Execute&…

LGAMEFI基于BPL公链开发的第一生态:开启RWA游戏娱乐与DeFi融合的新纪元

在去中心化金融&#xff08;DeFi&#xff09;与游戏娱乐的结合趋势中&#xff0c;BPL公链上的LGAMEFI项目代表了前沿的技术革新和市场领导。这种将web2上成熟页游进行RWA链改&#xff0c;不仅仅是将游戏热门领域融合&#xff0c;更是在寻找一种全新的参与者经验&#xff0c;将玩…

archLinux安装记录

archLinux安装记录 基于wsl的arch 启用wsl 首先&#xff0c;按Win S搜索启用或关闭Windows功能&#xff08;Turn Windows features on or off&#xff09;,打开虚拟机平台和WSL&#xff0c;并重启Windows。 重启后&#xff0c;进入Windows设置&#xff0c;检查更新。 更新完…

『运维备忘录』之 Sed 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…