通讯协议入门——PS2(SPI协议)详解

前言:

  手柄跟键盘一样,都是人与机器沟通的一个工具,只是交互具体方式不太一样而已。作为开发者,我们也不用在意他们之间的差异,我们只需要知道他们之间是用什么进行沟通的。
  就像人类沟通一样,要有嘴和耳朵,也就是发送器和接收器。发送器已经被厂家规定好软硬件,我们也可以做二次开发,但是本篇文章我们把重点放在微处理器(人的大脑)和接收器(人的耳朵)直接的沟通

解释:

什么是通信?什么是通信协议?http://t.csdnimg.cn/0eFMG
为什么要学习PS2手柄使用?http://t.csdnimg.cn/5OjAZ

一、硬件部分:

1. 接收器引脚及作用:

(1)​​引脚:
​​​​​​​​在这里插入图片描述
在这里插入图片描述

分析:我们初步学习只需要了解某些重要的引脚即可
(1)DI,DO为数据口,用于传输数据,DI为data in,指数据输入到我们使用的单片机
(2)CS用于选择该设备,低电平为选择
(3)CLK为时钟口,类似于节拍器,让两个单片机通讯时能同步
(4)VDD(3-5v),GND为电源口

二、软件部分:

1、SPI通信协议

​​​​​​​​​​​​在这里插入图片描述

2、具体协议:

在这里插入图片描述

3、实验:

  按下手柄按键,对应按键的LED灯亮
在这里插入图片描述
参考代码:(环境:IAP15FK61S2 12MHZ)
https://gitee.com/late-night-study/Tech

### STM32 使用 SPI3 接口连接 PS/2 设备 #### 配置环境准备 为了使STM32能够通过SPI3接口与PS/2设备通信,首先需要利用STM32CubeMX工具来初始化项目设置。打开STM32CubeMX并选择Start My Project from MCU选项,接着挑选目标微控制器型号,在此案例中选用的是广泛使用的F103C8T6作为例子[^3]。 #### 初始化SPI外设配置 进入Pinout & Configuration界面后找到SPI3模块,并将其激活用于全双工模式下的主控端操作。确保正确设定SCK、MISO以及MOSI引脚的功能定义;对于PS/2协议来说,通常只需要关注CLK(时钟线)和DATA(数据线),因此可以将SPI的NSS信号忽略不计或固定拉高处理。完成这些基本参数调整之后保存工程文件以便后续开发工作继续推进。 #### 编写驱动程序代码片段 下面展示一段简单的C语言源码用来演示如何发送命令给PS/2键盘并通过SPI总线接收响应信息: ```c #include "main.h" // 定义全局变量存储接收到的数据包长度 uint8_t receivedDataLength; void SendCommandToPS2(uint8_t command){ // 清除SPI传输标志位 __HAL_SPI_CLEAR_FLAG(&hspi3, SPI_FLAG_TXE); // 发送指令前先等待忙状态结束 while (__HAL_SPI_GET_FLAG(&hspi3,SPI_FLAG_BSY)); // 启动一次单字节传送过程 HAL_SPI_Transmit(&hspi3,&command,sizeof(command),HAL_MAX_DELAY); } void ReceiveResponseFromPS2(){ uint8_t buffer; // 准备好接受来自外部设备的信息 HAL_StatusTypeDef status = HAL_SPI_Receive(&hspi3,&buffer,1,HAL_MAX_DELAY); if (status == HAL_OK){ // 如果成功获取到有效载荷,则更新记录其大小 receivedDataLength++; // 处理实际业务逻辑... } } ``` 上述函数实现了向PS/2装置发出特定请求并且监听返回的结果集。需要注意的是这只是一个基础框架示例,具体应用场合可能还需要根据实际情况增加错误检测机制或者其他高级特性支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值