第三章-SPI协议 STM32 HAL库 SPI 协议讲解分析 逻辑分析仪查看

ops/2024/10/18 16:46:12/

第三章-SPI协议

3.1-协议概述

这是SPI的一种接线方式(多NSS方式)

在这里插入图片描述

  • SCLK,时钟信号,时钟频率即SPI速率,和SPI模式有关
  • MOSI,数据主机输出,数据从机输入
  • MISO,数据主机输入,数据从机输出
  • CS,从机设备选择,低电平有效

物理层的四种工作模式

那么要完成通信,就要规定主机什么时刻去读取从机数据,决定他们的主要是总线空闲是SCK的时钟状态以及数据采样时刻,分别是"时钟极性CPOL"和"时钟相位SPHA"概念

时钟极性CPOL:总线空闲时候SCK的时钟状态

CPOL:0 表示SCK在空闲状态是为低电平

CPOL: 1 表示SCK在空闲状态是高电平

时钟相位SPHA:数据采样时刻

SPHA: 0 表示奇数边沿采样,及在SCK第一个边沿时输入 输出数据有效

SPHA: 1表示偶数边沿采样,及在SCK第二个边沿时输入输出数据有效

如图这是一种模式

在这里插入图片描述

所以根据时钟相位和极性共有四种组合–四种模式不需要记住

在这里插入图片描述

3.2-STM32的SPI外设

STM32SPI的特性

在这里插入图片描述

SPI的硬件接口

在这里插入图片描述

一般

在这里插入图片描述

这是举例的一种SPI通信方式

可以看出SPI必须是收发同时进行的,在收的时候必须要发出去数据,在发的时候也必须接收到数据

NSS引脚就使用普通的GPIO 就可以了

在这里插入图片描述

使用SPI 要注意按照从机的要求进行设置

  1. SPI的模式 是那个0-3
  2. MSB先行 还是LSB先行(高位在前还是低位在前)
  3. 通信速率是多少HZ,
  4. 数据帧长度是8位还是16位

3.3-PS2游戏手柄介绍

手柄引脚介绍:

引脚和直接介绍的功能都是相同的

在这里插入图片描述

通信协议–下面是PS2手柄的介绍,我看看如何分离出关键信息

通信时序图-如图

在这里插入图片描述

这是通信时序图,我们可以通过通信时序图获得一下信息

  1. 时钟线空闲时为高电平,所以时钟极性为1 (CPOL: 1 )
  2. 在时钟第一个边沿采样,是在奇数边沿采样,所以时钟相位为0(SPHA: 0 )

下面是具体协议内容介绍

在这里插入图片描述

通信过程解释:

  1. 每次通信都是9个字节,每个字节是八位,每个字节代表的意义如图

    过程如下

    单片机要读或者写手柄数据,先把CS线拉低

    单片机发出命令"0x01",手柄现在回复空;表示意思单片机要发起通信

    手柄回复ID(0x41绿灯模式,0x73红灯模式),单片机发送0x42;请求数据

    手柄发出0x5A,单片机发空;表示数据来了

    然后单片机发"WW"设置手柄电机,手柄发送data(这个data里面是一些按键状态)

    然后单片机发送"YY"设置手柄电机,然后手柄发送data(这个data里面是一些按键状态)

    然后单片机空,手柄发送data(这个data里面是一些按键状态,这个里面根据模式,可能是模拟值)

​ 然后单片机空,手柄发送data(这个data里面是一些按键状态,这个里面根据模式,可能是模拟值)

​ 然后单片机空,手柄发送data(这个data里面是一些按键状态,这个里面根据模式,可能是模拟值)

​ 然后单片机空,手柄发送data(这个data里面是一些按键状态,这个里面根据模式,可能是模拟值)

下面是通信的其他部分

在这里插入图片描述

3.4-STM32-SPI

在这里插入图片描述

7.分频这个要根据从机设置如图,PS2的时钟频率为:

在这里插入图片描述

时钟来源为:

在这里插入图片描述

最大的速率18MHZ

在这里插入图片描述

然后我们初始化一个引脚设置为输出

在这里插入图片描述

顺便输出化串口一方便调试

在这里插入图片描述

添加一个PS2_SPI.h和PS2_SPI.c

实际数据是低位在前的也就是LSB先行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
SPI 的先做到这里,目前进度

  1. 发现逻辑分析仪设置低位先行,才能正确解析单片机先手柄发送的命令,所以判断他们的通信是低位先行的,所以我已经更改了CUBMXS的设置。
  2. 还有分析逻辑分析仪,为什么不能解析到手柄发给单片机的 ID命令(比如红灯0X73)或者是命令0X5A 二是总是相差一个位,好像现在采集的向右移动就是了

http://www.ppmy.cn/ops/102468.html

相关文章

电脑丢失dll文件一键修复之dll确实损坏影响电脑运行

在使用电脑过程中,DLL文件丢失或损坏是一个常见的问题,它可能导致程序无法正常运行,甚至影响整个系统的稳定性。本文将详细介绍如何一键修复丢失的DLL文件,探讨常见的DLL丢失报错原因,并提供详细的修复步骤和预防措施。…

我后悔不早知道的8个Python装饰器技巧

1) 语法等价性 add_exclamation def greet(name):return hello nameadd_exclamation 是装饰器函数。greet 是被装饰的函数(我们叫它“被装饰者”)。 我们用 符号来装饰一个函数,使用装饰器函数。这种 语法和下面这段代码完全一样&#…

护眼台灯减蓝光和无蓝光的有区别?眼科医生推荐的护眼台灯

自从疫情以后,”网课“成了一个热门的课程,许多家长会为了孩子的学习进行网课的报名。孩子们的眼睛处于生长期比较脆弱,长时间对着手机,电脑上课,电子产品会产生蓝光,眼睛会受到一定的伤害。护眼台灯减蓝光…

UE5 多个类选择界面生成

在Unreal Engine 5 (UE5) 中,如果你想要创建一个可以选择多个类的界面,你可以使用SClassPicker小部件。以下是一个简单的例子,展示如何在UE5的编辑器模块中创建一个自定义的编辑器工具栏按钮,并打开一个类选择器。 #include &quo…

【基础算法总结】BFS 解决拓扑排序

BFS 解决拓扑排序 1.拓扑排序简介2.课程表3.课程表 II4.火星词典 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.拓扑排序简介 拓扑排序解…

基于imx6ull平台opencv的图像采集和显示屏LCD显示功能(不带Qt界面)

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境 三、开发流程3.1 编写测试3.2 验证功能 一、概述 本文档是针对imx6ull平台opencv的图像采集和显示屏LCD显示功能,opencv通过摄像头采集视频图像,将采集的视频图像送给显示屏LCD进行显示。 测试结果…

SpringBoot集成kafka开发-消息消费的分区策略(消费者如何判断从哪个分区中消费消息的?)

这里写目录标题 1、kafak消息者消费消息的4种分区策略2、kafka默认的消费分区策略1-RangeAssignor(均匀分配、默认分配策略)2.1、代码验证RangeAssignor的消息分区策略2.1.1、消费者2.1.2、生产者2.1.3、kafak配置类2.1.4、对象实体类2.1.5、项目配置文件…

【Axure视频教程】回车键的应用

今天教大家怎么使用回车键实现交互效果,我们回车键切换输入框为案例,在输入框输入内容后,按下回车键,如果还有空的输入框,就将光标设置到对应输入框,可以继续填写;如果全部输入框都填写完整,就会…