当前位置: 首页 > news >正文

05-STM32F1 - 串行通信SPI

SPI

  • STM-SPI作为主机,从机

  • SPI的时钟,最高为Pclk/2,SPI1最高为36Mhz,SPI2最高为18Mhz。

  • SPI的四种模式 CPOL CPHA,数据帧8~16位,LSB,MSB

  • 全双工,双向单线,单线

物理层

在这里插入图片描述

接口标准

序号名称说明
1NSS片选线,低电平有效
2SCK时钟信号线
3MOSI主设备输出,从设备输入
4MISO主设备输入,从设备输出

协议层

起始信号和停止信号

NSS 信号线由高变低,是SPI 通讯的起始信号。NSS 是每个从机各自独占的信号线,当从机在自己的NSS 线检测到起始信号后,就知道自己被主机选中了,开
始准备与主机通讯。在图中的标号处,NSS 信号由低变高,是SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

CPOL/CPOH

时钟极性CPOL:SPI 通讯设备处于空闲状态时,SCK 信号线的电平信号(即SPI 通讯开始前,NSS 线为高电平时SCK 的状态)。CPOL=0 时,SCK 在空闲状态时为低电平,CPOL=1 时,SCK 在空闲状态时为高电平,

时钟相位CPHA:数据的采样的时刻。当CPHA=0 时,MOSI 或MISO 数据线上的信号将会在SCK 时钟线的“奇数边沿”被采样。当CPHA=1 时,数据线在SCK 的“偶数边沿”采样。

SPI模式CPOLCPHA空闲时SCK时钟采样时刻
000低电平奇数边沿
101低电平偶数边沿
210高电平奇数边沿
311高电平偶数边沿

在这里插入图片描述

在这里插入图片描述

SPI基本结构

在这里插入图片描述

  • 通讯引脚
  • 时钟控制逻辑
  • 数据控制逻辑
  • 整体控制逻辑

NSS可以使用软件控制,其他引脚使用硬件SPI控制

时钟控制:波特率发生器:BR[2:0],控制SPI的时钟。CR1寄存器

数据控制逻辑:

SPI的MOSI及MISO都连接到数据移位寄存器上,数据移位寄存器的数据来源于接收缓冲区及发送缓冲区。

通过写SPI的数据寄存器DR把数据填充到发送缓冲区中。

通过读SPI的数据寄存器DR,可以获取到接收缓冲区中的内容。

其中数据帧长度通过DFF为配置成8位及16位。

模式:配置LSBFIRST位,可选择MSB先行还是LSB先行。

SPI初始化结构体

typedef struct
{uint16_t SPI_Direction;           uint16_t SPI_Mode;                uint16_t SPI_DataSize;           uint16_t SPI_CPOL;                uint16_t SPI_CPHA;               uint16_t SPI_NSS;                                uint16_t SPI_BaudRatePrescaler;  uint16_t SPI_FirstBit;          uint16_t SPI_CRCPolynomial;       
}SPI_InitTypeDef;

编程要点

在这里插入图片描述

http://www.lryc.cn/news/40805.html

相关文章:

  • 【Pytorch】Tensor的分块、变形、排序、极值与in-place操作
  • 数组栈的实现
  • *p++,*(p++),*++p,(*p)++区别?
  • 又一个线上偶发问题-系统短暂无法获取到Redis连接
  • [ 系统安全篇 ] 拉黑IP - 火绒安全软件设置IP黑名单 windows使用系统防火墙功能设置IP黑名单
  • MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
  • 算法竞赛必考算法——动态规划(01背包和完全背包)
  • 基于深度学习的农作物叶片病害检测系统(UI界面+YOLOv5+训练数据集)
  • QT入门Item Views之QListView
  • GEE:计算1990-2021年的指数最大值和最小值,并根据最大最小值对每一副影像归一化
  • LeetCode KMP 算法
  • 全面剖析OpenAI发布的GPT-4比其他GPT模型强在哪里
  • leetcode——26. 删除有序数组中的重复项
  • 基于springboot垃圾分类网站设计实现【毕业论文、源码】
  • 计算机组成原理实验一(完整)
  • 【SSM】MyBatis(一.基础)
  • LInux指令之文件目录类
  • 【c++】:STL中vector的模拟使用及模拟实现
  • C++ STL:vector的使用方法及模拟实现
  • naive UI 的upload组件自定义手动上传图片的base64位
  • 信创办公–基于WPS的PPT最佳实践系列(表格和图标常用动画)
  • Spring Bean实例化和初始化的过程
  • WorkTool企微机器人接入智能问答
  • C导入正则库问题
  • 尚融宝05-Node.js入门
  • 「SAP ABAP」OPEN SQL(八)【WHERE语句大全】
  • Ribbon负载均衡的原理(源码分析)
  • 用sql计算两个经纬度坐标距离(米数互转)
  • C语言详解KMP算法
  • redis在window上安装与自启动