IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> SPI的基本知识(偏向STM32中的SPI) -> 正文阅读

[嵌入式]SPI的基本知识(偏向STM32中的SPI)

1. 杂谈

快两个月没有写博文了,前段时间确实很忙,以至于天天跟我妈抱怨说快累死了,可是最近才知道我妈的工时变成了早五晚8,却从来没有听到她的抱怨,对比我妈,我真的是差的远,不仅行动上懒惰,在时间规划上也差一大截,所以接下来要多行动少抱怨,享受当下,毕竟好的坏的都是你曾经的一部分。

2.什么是SPI?

SPI(Serial Peripheral Interface)是一种串行同步接口,最早由motorola公司提出,用在ADC,flash等与控制器之间通信的场合。同步是它的特点,意思是它在通信时由时钟控制,而不像UART由通信协议规定。
SPI总线一般有四根线,MISO(主输入从输出),MOSI(主输出从输入),SCK(串行移位时钟),NSS(/SS)(片选)。
SPI采用主从方式进行通信,有一个主机,可以跟随多个从机,采用全双工的通信方式,下图是主机和从机的连接方式,注意,不同于UART,发送和接收在两个设备中要交叉连接,这里是主机的MISO和从机的MISO相连,主机的MOSI和从机的MOSI相连,在硬件连接调试时可别弄错了。
在这里插入图片描述
下面针对STM32中SPI的四根线进行介绍。

  1. NSS:从片选
    低有效。包括两种模式,软件NSS和硬件NSS,两者共同决定了内部片选的输入。
    软件NSS:NSS的电平由软件进行控制,主要是通过写SPI 控制寄存器的SS位进行实现。
    硬件NSS:分为两种情况,一种是NSS内部输出被使能,作为主SPI时,SSOE被使能,使得NSS使能,所有与NSS相连的设备自动变成从设备;另一种情况是。NSS内部输出被禁止,只能由外部决定,当NSS被拉低时,说明是从设备了。
    在这里插入图片描述

  2. SCK:时钟信号,主输出,从输入
    用于通讯数据的同步。由主机产生,最大的通讯速率为fpclk/2,可以通过配置控制寄存器的BR寄存器设置.
    在这里插入图片描述
    APB(advanced peripheral bus):外围设备总线。

  3. MOSI:主输出从输入
    数据方向从主机到从机,当作为主机时,数据从这条线发送,而作为从机,从这条线接收数据。

  4. MISO:主输入从输出
    数据传输方向跟MOSI刚好相反。

SPI的内部原理如下图所示。
在这里插入图片描述

  • 图中3部分是数据控制逻辑部分。MISO和MOSI直接与移位寄存器相连。
    ->发送数据时,数据移位寄存器以“发送缓冲区”为数据源,把数据一位一位地通过数据线发送出去。发送缓冲区的数据来自于数据总线。
    -> 接收数据时,数据移位寄存器把数据一位一位存储到“接收缓冲区”中。
  • 部分4是整体控制逻辑部分,用来协调整个 SPI 外设。控制参数包括配置SPI 模式、波特率的选择、主从模式选择等。

3. SPI的通信过程

3.1 通讯时序

下图是SPI作为主机时的通讯时序图。
在这里插入图片描述
上图包括以下几个信号;
1)起始信号和停止信号
当从机的NSS被拉低时,开始与主机进行通信,当NSS从低变为高后,停止与主机进行通信。

2)触发信号
表示数据变化时刻。

3)采样信号
表示数据的有效传输时刻。这里值得说明的是,采样方式,有四种,由CPOL/CPHA 决定。
CPOL:时钟极性。指 SPI 通讯设备处于空闲状态(不进行数据传输)时, SCK 信号线的电平信号,为0时SCK空闲时为低电平,为1时是高电平。
CPHA:时钟相位。为0时,在SCK的奇数边沿采样,为1时,在SCK的偶数边沿采样。
四种方式总结如下表:
在这里插入图片描述
下图是SCK偶数边沿采样,而这个边沿是上升沿还是下降沿取决于SCK空闲时低电平还是高电平,为低电平即CPOL为0时是下降沿采样,反之为上升沿采样。
在这里插入图片描述

3.2 数据收发过程

在这里插入图片描述
上图是某一种采样模式下,主机的数据收发过程。
1)发送数据时

  • 把要发送的数据写到数据寄存器中,即数据总线上,然后放在发送缓冲器中,通过总线,并行传到移位寄存器里,然后串行从MOSI引脚移出。
  • 当发送完一帧数据的时候,“状态寄存器 SR”中的“TXE 标志位”会被置 1,表示传输完一帧,发送缓冲区已空。注意要发送数据之前,必须往缓冲器里写数据才能发送,所以TXE要先清零再置位。
  • 等待到“TXE标志位”为 1时,若还要继续发送数据,则再次往“数据寄存器 DR”写入数据即可
    2)接收数据时
  • 把MISO接收到的数据串行放在移位寄存器中,然后通过总线并行移到接收缓冲器里,然后放在数据总线上。
  • 当接收完一帧数据的时候,“RXNE标志位”会被置 1,表示传输完一帧,接收缓冲区非空
  • “RXNE 标志位”为 1 时,通过读取“数据寄存器 DR”可以获取接收缓冲区中的内容。

4. STM32里SPI的配置

1)GPIO的初始化
因为STM32的引脚一般是复用的,所以需要将GPIO配置成SPI的模式。
GPIO 初始化流程如下:
在这里插入图片描述
参考代码如下:
在这里插入图片描述

2)SPI的模式初始化
包括SPI的方向,主从选择,数据长度,时钟极性和相位,NSS的选择,波特率的设置,高/低位先行等.
参考代码如下:
在这里插入图片描述
之后需要使能SPI外设
在这里插入图片描述
3) 数据收发
根据前面SPI的通信过程,在发送数据时,需要等TXE置1才能发送,在发送时把数据存在发送缓冲器里,当RXE置1表示发送一帧完成,接收缓冲器里非空了,可以将接收缓冲器的数据取出。
参考代码如下:
在这里插入图片描述
在这里插入图片描述

参考文献
《零死角玩转STM32F103》
《STM32中文参考手册(RM008)》
《rm0091-stm32f0x1stm32f0x2stm32f0x8-advanced armbased-32bit-mcus-stmicroelectronics》

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:25:42  更:2021-09-13 09:25:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/22 14:41:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码