基于stm32的spi从机实验HAL库编程

目录

  • 基于stm32的spi从机实验HAL库编程
    • 前言
    • 业务场景
    • 硬件设计接线
    • 配置swd接口
    • 配置spi
    • 配置DMA
    • 配置中断
    • 配置系统时钟
    • 配置工程
    • 生成代码
    • 写点从机代码
    • 上机现象
    • 后记
    • 本文使用的测试工程

基于stm32的spi从机实验HAL库编程

前言

在微控制器的世界中,串行外设接口(SPI)是一种广泛使用的接口,它允许设备之间进行快速通信。在这篇文章中,我将介绍如何使用STM32的硬件抽象层(HAL)库来编程一个SPI从机。我们将通过一个实验来理解SPI在实际应用中的运作方式,并且深入了解STM32的编程方法。

业务场景

假设有一个板子A作为主机端,通过一个接口的方式向外通讯交互,我们有一个板子B作为从机,用作接收端,现在按照主机端的协议来跟主机进行交互。

硬件设计接线

在这里插入图片描述

在我的这个硬件中,手头有一个stm32g0f6p6的板子,所以我以这个板子用作从机端进行设计。

打开STM32CubeMX进行操作

配置swd接口

在这里插入图片描述

配置spi

在这里插入图片描述

圈起来的参数要迎合主机端,不然通讯交互会出错,不知道主机端是什么配置时,则需要根据主机端底层通讯展示出来的波形来配置,用一个逻辑分析仪抓取分析一下,以我的这个场景为例,我的底层通讯呈现如下的波形:

在这里插入图片描述

按照我这里的展示,数据线1是对应MOSI,数据线2对应MISO,可以看到主机端时钟空闲电平是高电平,所以参数CPOL选择High参数,可以观察到数据1在交互时在第二边沿时电平很稳定,所以我这里CPHA的参数选择第一个边沿。至于是LSB先发,还是MSB先发,这个得双方进行约定,我这里以MSB先发为例。

配置DMA

在这里插入图片描述

配置中断

在这里插入图片描述

配置系统时钟

在这里插入图片描述

配置工程

在这里插入图片描述

在这里插入图片描述

生成代码

在这里插入图片描述

写点从机代码

在我的这个场景中,主机端每隔4ms发来一次数据,主机的数据格式如下:

在这里插入图片描述

在这里插入图片描述

从机端的代码如下:

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_SPI1_Init();/* USER CODE BEGIN 2 */HAL_SPI_TransmitReceive_DMA(&hspi1,g_tx_buff,g_rx_buff,4);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

从机使用DMA的方式进行接收,接收完成之后会进入一个回调函数,在回调函数里面我重新开启DMA接收,这是因为不是使用DMA的循环模式,循环模式自己用得不是很熟,这里是收完一次在重新打开。

void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{if(hspi->Instance == SPI1){HAL_SPI_TransmitReceive_DMA(&hspi1,g_tx_buff,g_rx_buff,4);}
}

至于这个回调函数在哪里,可以在对应的.h中看到相关的声明,我们把对应的函数拿出来用就行了。

在这里插入图片描述

上机现象

在这里插入图片描述

在这里插入图片描述

可以看到,从机端在正常接收数据,在回调函数里面把数据摘取出来,就可以进行下一步的数据控制了。

后记

这里我只是进行简单的交互实验,实际工程中,数据交互会按照协议来进行设计,哪些字节表示命令,哪些字节表示校验,哪些字节表示长度,哪些字节表示参数,这些字节是什么含义,只有熟悉整个系统的设计者知道。

本文记录到此,算是自己工程的一次实践,希望这篇文章能帮助到你,本文完!!感谢阅读,感谢关注。

本文使用的测试工程

https://download.csdn.net/download/weixin_44317448/89286989

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数智化快速开发平台

助力企业IT规划标准化,实现企业IT生态化 目前市场上有很多面向企业各种业务场景的产品,这些产品给企业管理带来便利性的同时,也带来了一系列问题,例如: 不同系统的后台管理功能基本一致,却需要重复建设&a…

基于Detectron2的计算机视觉实践

书籍:Hands-On Computer Vision with Detectron2: Develop object detection and segmentation models with a code and visualization approach 作者:Van Vung Pham,Tommy Dang 出版:Packt Publishing 书籍下载-《基于Detectr…

Codigger:Web应用让开发者拥有更高效的开发之旅

在当今软件开发领域,Web应用以其跨平台、易访问和实时更新的特性,逐渐成为了主流的开发方向。从开发者的视角来看,Codigger借助B/S(浏览器/服务器)架构和云计算技术,为开发者带来了诸多便利和优势。这些优势…

Java Web 学习笔记(一) —— MySQL(3)

目录 1 Mysql 函数1.1 日期函数1.2 判断函数1.3 字符函数1.4 数学函数 2 Mysql 性能2.1 提高操作数据库性能2.2 执行次数比较多的语句2.3 sql语句的执行效率 3 Mysql 优化(***)3.1 定位慢查询3.2 SQL执行计划3.3 索引3.3.1 索引介绍与分类3.3.2 索引的使…

#内部类#

1,概念 如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外 部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。重点:内部类是一个独立的类 注意&…

Chrono下载管理器:提升下载体验,有效管理文件

名人说:莫愁千里路,自有到来风。 ——钱珝 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、介绍二、下载安装1、Chrome应用商店(需科学)2、第三方直链下载 三、使…

【SpringBoot整合系列】SpringBoot整合RabbitMQ-消息可靠性

目录 确保消息的可靠性RabbitMQ 消息发送可靠性分析解决方案开启事务机制发送方确认机制单条消息处理消息批量处理 失败重试自带重试机制业务重试 RabbitMQ 消息消费可靠性如何保证消息在队列RabbitMQ 的消息消费,整体上来说有两种不同的思路:确保消费成…

当CV遇上transformer(二)MAE模型及源码分析

当CV遇上transformer(二)MAE模型 2020年10月,Dosovitskiy首次将纯Transformer的网络结构应用于图像分类任务中(ViT),并取得了当时最优的分类效果,其研究成果是Transformer完全替代标准卷积的首次尝试。大神何恺明在2021年11月基于(ViT)架构&…

【Linux网络编程】HTTPS协议

【Linux网络编程】HTTPS协议 目录 【Linux网络编程】HTTPS协议HTTPS介绍加密常见的加密方式HTTPS的工作过程探究(重点)常见问题完整流程总结 作者:爱写代码的刚子 时间:2024.5.9 前言:本篇博客将会介绍HTTPS协议 HTTPS…

软件技术主要学什么课程

软件技术专业主要学习的课程和内容有编程语言、数据结构与算法、数据库技术等,以下是上大学网( www.sdaxue.com)整理的软件技术主要学什么课程,供大家参考! 编程语言:掌握一种或多种编程语言,如C#、Java、Python、C等&…

unaipp推荐算法的汽车租赁系统zaxzu 微信小程序hbuiderx

随着现代汽车租赁管理的快速发展,可以说汽车租赁管理已经逐渐成为现代汽车租赁管理过程中最为重要的部分之一。但是一直以来我国传统的汽车租赁管理并没有建立一套完善的行之有效的汽车租赁管理系统,传统的汽车租赁管理已经无法适应高速发展,…

从开发角度理解漏洞成因(02)

文章目录 文件上传类需求文件上传漏洞 文件下载类需求文件下载漏洞 扩展 留言板类(XSS漏洞)需求XSS漏洞 登录类需求cookie伪造漏洞万能密码登录 持续更新中… 文章中代码资源已上传资源,如需要打包好的请点击PHP开发漏洞环境(SQL注…