SPI协议硬件回环测试

简介

1.单片机型号:STM32L431RCT6

2.方式:硬件上的回环测试

3.使用软件:CubeIDE

一、 软件配置

1.硬件原理图

通过原理图我们可以看出对于我们较为重要的四个管脚为:PA15、PC10、PC11、PC12;下面来配置这四个管脚

1.1        SPI协议配置

接下来配置一些参数

注意:

1.Data Size 要选择8bits,要不然会出现 收发数据不一致的情况(笔者最开始设置的就是4bit然后出现了收发不一致困扰了我整整两天),选择8bit的原因是在多种协议和传感器中,8 位数据帧是标准格式。例如,许多传感器和显示器模块也采用 8 位数据帧进行通信。当然在一些特殊场合下也可以选择其他大小进行传输。

2.注意哦,我们的NSS SignalType选择了软件,所以等下我们要自己进行配置CS片选信号哦。

1.2        片选信号配置

由原理图我们可以看到PA15为片选信号,我们首先要将他配置成输出模式

上面刚刚提到了要对其进行软件选择(片选信号低电平时有效)

#define CS_PIN GPIO_PIN_15
#define CS_PORT GPIOA

#define cs_low()  HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET)
#define cs_high() HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET)

二、代码处理

1.生成的代码

配置完成后,便可自动生成代码,下面是初始化spi3生成的一些代码,是对我们刚刚配置的做出的一些具体解释

void MX_SPI3_Init(void)
{

  /* USER CODE BEGIN SPI3_Init 0 */

  /* USER CODE END SPI3_Init 0 */

  /* USER CODE BEGIN SPI3_Init 1 */

  /* USER CODE END SPI3_Init 1 */
  hspi3.Instance = SPI3;
  hspi3.Init.Mode = SPI_MODE_MASTER;
  hspi3.Init.Direction = SPI_DIRECTION_2LINES;
  hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi3.Init.NSS = SPI_NSS_SOFT;
  hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi3.Init.CRCPolynomial = 7;
  hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  if (HAL_SPI_Init(&hspi3) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI3_Init 2 */

  /* USER CODE END SPI3_Init 2 */

}

不做过多展示

2.        我们需要添加的代码

在进行通信之前我们需要知道大概的通信过程,简言之就是 拉低片选信号->发送数据、接收数据->通信结束,拉高片选信号

创建一个spi3_flash.c1,添加代码

#include "main.h"
#include "spi.h"
#include "usart.h"
#include "gpio.h"
#include <stdio.h>
#include "spi3_flash.h"
#define Dummy_Byte 0xff
#define SPI_TIMEOUT 1000 // 设置超时为 1000 毫秒


uint8_t SPI_FLASH_Sendbyte(uint8_t byte)
{
    uint8_t r_data = 0;
    HAL_StatusTypeDef status = HAL_SPI_TransmitReceive(&hspi3, &byte, &r_data, 1, SPI_TIMEOUT);
    printf("Sent: 0x%02X, Received: 0x%02X, Status: %d\n", byte, r_data, status);
    return r_data;
}

uint8_t SPI1_FLASH_Readbyte(void)
{
    uint8_t t_data = Dummy_Byte; // 发送一个 Dummy_Byte
    uint8_t r_data = 0;
    HAL_StatusTypeDef status = HAL_SPI_TransmitReceive(&hspi3, &t_data, &r_data, 1, SPI_TIMEOUT);
    printf("Sent: 0x%02X, Received: 0x%02X, Status: %d\n", t_data, r_data, status);
    return r_data;
}

在main.c中做如下修改:

uint8_t sentData, receivedData;
sentData = 0x55;
 cs_low(); 
 SPI_FLASH_Sendbyte(sentData);
 cs_high(); 
 cs_low(); 
 receivedData = SPI1_FLASH_Readbyte();
 cs_high(); 
 printf("Sent data: 0x%02X, Received data: 0x%02X\n", sentData, receivedData);

三、运行结果

 

 

 如果有问题,欢迎各位和笔者私下交流哦

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目标检测——TNO多波段图像数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 T…

R语言数据分析案例31-运用差分整合移动平均自回归模型对世界主要国家(俄罗斯)的污染物排放量进行研究预测

一、研究背景与意义 空气污染导致的环境恶化已经成为世界各国许多国家和地区发展受限的重要原因。空气污染物是由气态物质、挥发性物质、半挥发性物质和颗粒物质的混合物造成的&#xff0c;其中典型 的空气污染物就是人们生活中经常使用到的高频词汇雾霾。本文主要对其中的污染…

黄仁勋加州理工毕业典礼演讲:人工智能是我们这个时代最重要的技术

英伟达公司首席执行官黄仁勋周五&#xff08;6月14日&#xff09;在加州理工学院&#xff08;Caltech&#xff09;毕业典礼上发表演讲&#xff0c;鼓励毕业生在逆境中努力&#xff0c;不断寻求新的机遇。 黄说&#xff0c;加州理工学院因其毕业生受人尊敬而闻名&#xff0c;如…

查询Kafka集群中消费组(group)信息和对应topic的消费情况

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

玩转nRF52840-DK开发套件(4)

nRF52840-DK 开发套件UART interface through a virtual serial port &#xff0c;如下 串口初始化以及引脚定义&#xff1a; const app_uart_comm_params_t comm_params {RX_PIN_NUMBER,TX_PIN_NUMBER,RTS_PIN_NUMBER,CTS_PIN_NUMBER,UART_HWFC,false, #if defined (UART_PRES…

如何量化管理研发团队的技术债务?

在探讨技术债的成因之前&#xff0c;我们需要澄清一些关于技术债起因和本质的普遍误解。 误解一&#xff1a;技术债务等同于劣质代码 那么&#xff0c;什么构成了所谓的「劣质代码」&#xff1f; 所谓的好代码&#xff0c;可能是指那些整洁、不会在未来限制你决策的代码&…

Type-C诱骗芯片LDR6500

随着科技的飞速发展&#xff0c;电子设备的智能化和便携化已成为趋势。在这个过程中&#xff0c;Type-C接口因其高速传输、正反可插以及强大的扩展能力&#xff0c;逐渐成为主流接口标准。然而&#xff0c;Type-C接口的广泛应用也带来了一系列挑战&#xff0c;其中之一便是如何…

CENTOS7.9下服务器双网卡bond模式6配置示例

​1.bond口的特点 bond口通过将多个网口进行聚合&#xff0c;多个网口聚合后一方面实现了大带宽传输&#xff0c;另外多网口聚合后也同时具有冗余特性&#xff0c;当其中一个网口down掉后&#xff0c;其他网口会继续转发流量&#xff0c;不会导致流量中断。 2.使用条件 当环境…

wireshark使用情况与网口调试记录

wireshark使用情况与网口调试记录 前言wireshark无法获取本地数据方法一——Npcap方法二——WinPcap效果 UDP组播&#xff0c;却一直捕获到127.0.0.1总结 前言 在网口调试中&#xff0c;wireshark使用较多&#xff0c;常出现一些无法捕获或者ip获取数据不正确的情况&#xff0…

探索设计模式——单例模式详解

前言&#xff1a;设计模式的作用主要是为了——利用设计方式的重用来自动地提高代码的重新利用、提高代码的灵活性、节省时间&#xff0c; 提高开发效率、低耦合&#xff0c;封装特性显著&#xff0c; 接口预留有利于扩展。 设计模式的种类有很多种&#xff0c;本篇内容主要讲解…

目标检测顶会新成果!20个突破性方法,更高性能,更强理解与分析能力!

【目标检测】在近年来的深度学习领域中备受关注&#xff0c;它通过识别和定位图像中的目标对象&#xff0c;提升了模型在图像理解和分析方面的能力。目标检测技术在自动驾驶、安防监控和医疗影像分析等任务中取得了显著成果。其独特的方法和卓越的表现使其成为研究热点之一。 为…

我整理的面向大模型的高质量语料集!

自己一直在做企业内部的垂类大模型&#xff0c;但随着运营深入&#xff0c;发现光有企业内部的领域数据还不足以微调出一个健壮的领域大模型&#xff0c;因为泛化能力比较弱。 在领域数据中融入公共数据进行训练是公认的提升领域大模型泛化能力的方法&#xff0c;下面是我整理的…

《 穿越时空的代码、在回首:Evil.js两年后的全新解读 》

破坏计算机系统罪可能香翅捞饭&#xff01;&#xff01;&#xff01; 本文以源码解析&#xff0c;场景复现&#xff0c;毒与药1.0.0攻防战&#xff0c;来主导本次攻击下毒、防守破解 只有周日才注入&#xff0c;当周日产生bug时&#xff0c;工作日程序员进行debug时将不会进行…

JavaScript和promise——0_1 promise

文章目录 是什么&#xff1f;未来值回调和未来值在回调环境下这么和未来值交互&#xff1f;群居的未来值其他的解决方案 这样写可以实现目标效果。可是&#xff0c;这样写优雅吗&#xff1f; 英雄登场关键词&#xff1a;then关键词&#xff1a;回调 为什么promise不需要start函…

【机器学习】CART决策树算法的核心思想及其大数据时代银行贷款参考案例——机器认知外界的重要算法

目录 引言 概述 CART决策树的特点 核心思想 减少不确定性的指标 基尼系数&#xff08;Gini Index&#xff09; 分类错误率 熵 银行实例 背景 数据准备 模型构建 模型评估与优化 应用与结果 代码示例 ✈✈✈✈引言✈✈✈✈ CART算法既可以用于分类问题&#xff0…

Simulink代码生成: 状态机的其他建模方法

本文研究状态机建模的一些方法和技巧。 文章目录 1 引入2 状态机建模方法2.1 状态机中的计时2.2 状态机中的计数2.3 转移顺序 3 总结 1 引入 博主一直很喜欢用Simulink中的状态机建模&#xff0c;在这里想记录一下自己平时使用Stateflow建模的心得。因为自身行业所限&#xff…

深入理解并打败C语言难关之一————指针(3)

前言&#xff1a; 昨天把指针最为基础的内容讲完了&#xff0c;并且详细说明了传值调用和传址调用的区别&#xff08;这次我也是做到了每日一更&#xff0c;感觉有好多想写的但是没有写完&#xff09;&#xff0c;下面不多废话&#xff0c;下面进入本文想要说的内容 目录&#…

【数据结构】第十七弹---C语言实现选择排序

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、选择排序 1.1、基本思想 1.2、代码实现 1.3、代码测试 1.4、时空复杂度分析 总结 1、选择排序 1.1、基本思想 选择排序是一种简单直观的比…

【测试专题】系统测试报告(原件Word)

软件测试报告在软件开发过程中起着至关重要的作用&#xff0c;主要有以下几个主要原因&#xff1a; 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…

如何判断三相交流电子负载的性能

三相交流电子负载是模拟实际负载的设备&#xff0c;用于测试电源、变频器、逆变器等电力电子设备的性能。在购买和使用三相交流电子负载时。 三相交流电子负载能够稳定输出的最大有功功率&#xff0c;额定功率越高&#xff0c;说明负载的承载能力越强。在选择三相交流电子负载时…