【STM32 CubeMX】SPI HAL库编程

文章目录

  • 前言
  • 一、CubeMX配置SPI Flash
  • 二、SPI HAL编程
    • 2.1 查询方式函数
    • 2.2 使用中断方式
    • 2.3 DMA方式
  • 总结


前言

STM32 CubeMX 是一款由 STMicroelectronics 提供的图形化配置工具,用于生成 STM32 微控制器的初始化代码和项目框架。在 STM32 开发中,使用 CubeMX 可以大大简化初始化过程,并帮助开发者快速构建应用程序。其中,SPI(串行外设接口)是一种常用的通信协议,它在连接外部设备时非常有用。本文将介绍如何使用 CubeMX 结合 SPI HAL 库进行 STM32 SPI 的初始化和编程。


一、CubeMX配置SPI Flash

首先,选择任意的一个SPI
在这里插入图片描述
接下来,把SPI的参数调成下面这样:
在这里插入图片描述
SPI对应的引脚如下:
在这里插入图片描述
但是这里并没有片选引脚,片选引脚需要我们自己去选择一个GPIO作为片选引脚。

选择一个GPIO作为CS片选引脚,GPIO模式为输出模式:
在这里插入图片描述
接下来生成代码即可。

二、SPI HAL编程

2.1 查询方式函数

在SPI协议中,如果你发送了几个字节,你必定会接收到几个字节,所以HAL库提供了HAL_SPI_TransmitReceive来发送之后同时接收。

我们可以使用下面这些函数进行发送和接收

/* 发送同时接收数据 */
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t 
*pRxData, uint16_t Size, uint32_t Timeout);
/* 发送数据 */
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, 
uint32_t Timeout);
/* 接收数据 */
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, 
uint32_t Timeout);

参数说明:
SPI_HandleTypeDef *hspi 使用哪个 SPI 控制器
uint8_t *pTxData或uint8_t *pData 要发送的数据的 buffer
uint8_t *pRxData或uint8_t *pData 存储接收到的数据是 buffer
uint16_t Size 数据个数
uint32_t Timeout 超时时间,单位是 Tick,一般是 1ms
返回值 HAL_OK:成功
HAL_ERROR:错误
HAL_BUSY:总线忙
HAL_TIMEOUT:超时

2.2 使用中断方式

使用中断方式读写 SPI 设备的函数原型如下:

/* 发送同时接收数据 */
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, 
uint8_t *pRxData, uint16_t Size);
/* 发送数据 */
HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t 
Size);
/* 接收数据 */
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);

这些函数和我们前面的没有中断的是类似的,所以这边不再重复介绍参数

如果你需要使用回调函数,你需要在CubeMX里面使能NVIC
在这里插入图片描述
如果传输完成或出错,如下回调函数会被调用:

/* 发送、接收完成回调函数 */
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
/* 发送完成回调函数 */
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
/* 接收完成回调函数 */
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
/* 出错回调函数 */
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);

2.3 DMA方式

使用 DMA 方式读写 SPI 设备的函数原型如下:

/* 发送同时接收数据 */
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, 
uint8_t *pRxData, uint16_t Size);
/* 发送数据 */
HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t 
Size);
/* 接收数据 */
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t 
Size);

如果你想要使用DMA方式发送和接收SPI
你需要在CubeMX里面这样设置:
在这里插入图片描述
如果传输完成或出错,如下回调函数会被调用:

/* 发送、接收完成回调函数 */
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
/* 发送完成回调函数 */
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
/* 接收完成回调函数 */
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
/* 出错回调函数 */
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);

可以在这些回调函数里设置变量,表示传输已经完成。


总结

通过本文的介绍,我们了解了如何使用 STM32 CubeMX 结合 SPI HAL 库进行 SPI 接口的初始化和编程。首先,我们使用 CubeMX 配置了 SPI 外设的基本参数,包括模式、时钟极性、数据大小等。然后,我们生成了初始化代码,并在代码中添加了 SPI 的发送和接收功能。在编写代码时,我们使用了 HAL 库提供的函数来控制 SPI 外设的操作,这使得我们可以更加方便地进行 SPI 通信。最后,我们在主函数中调用了相应的 SPI 发送和接收函数,并通过调试工具验证了通信的正确性。通过这篇文章,读者可以掌握使用 CubeMX 和 SPI HAL 库进行 STM32 SPI 编程的基本方法,为自己的项目开发提供了便利。

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

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

相关文章

在Linux系统中设置HTTP隧道以实现网络穿透和端口转发

在数字化世界中,网络穿透和端口转发成为了许多开发者和系统管理员必备的技能。而在Linux系统中,通过设置HTTP隧道,我们可以轻松实现这一目标,让我们的服务即便在内网环境中也能被外部世界所访问。 那么,如何在Linux系…

idea 打不开项目 白屏

使用IDEA打开项目, 不知名原因崩溃了, 直接出现缩略图白屏。 解决过程: 尝试过重启IDEA,重启过电脑,重新引入相同项目(使用不同路径,存在缓存记录,依然打不开)&#xff…

磁盘删除的文件怎么恢复?4个简单方法(2024更新版)

“我有很多文件都保存在电脑磁盘里了,想问问电脑磁盘删除的文件有什么方法可以快速恢复吗?非常感谢大家!” 在日常工作和生活中,我们经常会在磁盘中存储大量的文件。这些文件对我们来说或许都有特殊的意义。磁盘删除的文件怎么恢复…

C#,二进制数的按位旋转(Bits Rotate)算法与源代码

1 二进制数的按位旋转 二进制数的按位旋转(翻转)是编程中常见的按位运算方法。 二进制数的按位旋转分为左转、右转。 左转意味着数据变大,右转意味着数据变小(有损)。 2 源程序 using System; using System.Text; us…

TCP三次握手、四次挥手(简易版)

TCP是面向连接的:在真正通讯之前,必须先建立一条通讯线路,必须先完成连接。 TCP完成连接的过程:(保证通讯线路畅通) 建立连接: 三次握手基本过程 ①客户端首先向服务器发送一个建立连接的…

如何在亚马逊,美客多,阿里国际,速卖通上安全地进行自养号测评?

借鉴亚马逊等跨境电商市场的经验,我们建议选取具备以下特点的产品在平台上销售,以实现需求稳定、竞争较低、利润较高,同时规避法律纠纷和质检问题。首先,应选择体积小、重量轻、易于运输的商品,这有助于降低运输成本和…

Java 2:运算符、表达式和语句

2.1 运算符与表达式 Java提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符、位运算符等。Java语言中的绝大多数运算符和C语言相同,基本语句如条件分支语句,循环语句等,也和C语言类似。 2.1.1算术运算符与算术表达式 1…

vue打包优化,webpack的8大配置方案

vue-cli 生成的项目通常集成Webpack ,在打包的时候,需要webpack来做一些事情。这里我们希望它可以压缩代码体积,提高运行效率。 文章目录 (1)代码压缩:(2)图片压缩:&…

计算机网络——17多路复用和解复用

多路复用和解复用 多路复用/解复用 在发送方主机多路复用 从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(连头部信息用于以后的解复用) 在接收方主机多路解复用 根据报文段的头部信息中…

揭秘铷原子钟:北斗卫星系统的“心脏”

揭秘铷原子钟:北斗卫星系统的“心脏” 近日,中国科学院精密测量科学与技术创新研究院的梅刚华团队发布了一项重要成果。他们成功将铷原子钟的短期频率稳定度提高到了E-14(即10的负14次方,相当于百万亿分之一)的量级&a…

七个常用的机器学习算法详解:决策树与随机森林的深入解析

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在机器学习中,决策树和随机森林是两个非常常用的算法。它们都属于监督学习的…

Nginx学习笔记

Bilibili尚硅谷视频 Nginx 简介 Nginx 概述 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 。 正向代理 正向代理:如…

Ditto:提升剪贴板体验的宝藏软件(复制粘贴效率翻倍、文本处理好助手)

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是Ditto?二、下载安装三、如…

Tomcat要点总结

一、Tomcat 服务中部署 WEB 应用 1.什么是Web应用 (1) WEB 应用是多个 web 资源的集合。简单的说,可以把 web 应用理解为硬盘上的一个目录, 这个目录用于管理多个 web 资源。 (2)Web 应用通常也称之为…

多模态(三)--- BLIP原理与源码解读

1 BLIP简介 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 传统的Vision-Language Pre-training (VLP)任务大多是基于理解的任务或基于生成的任务,同时预训练数据多是从web获…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(7)特征工程的基本方法

今天来学习特征工程的基本方法。 基本方法包括:特征选择(Feature Selection)、特征提取(Feature Extraction)和特征构建(Feature Construction)。 一、特征选择(Feature Selection&a…

智慧图书管理系统架构设计与实现

随着数字化时代的到来,智慧图书管理系统在图书馆和机构中扮演着重要的角色。一个优秀的图书管理系统不仅需要满足基本的借阅管理需求,还需要具备高效的性能、良好的扩展性和稳定的安全性。本文将讨论智慧图书管理系统的架构设计与实现,以满足…

shell脚本之高级变量

目录 一、高级变量赋值 1、高级变量赋值总结表 2、相关操作 二、变量间接引用 1、eval命令 一、高级变量赋值 1、高级变量赋值总结表 变量配置方式str 无配置str 为空字符串str 已配置为非空字符串var${str-expr}varexprvarvar$strvar${str:-expr}varexprvarexprvar$str…

GPT-4对编程开发的支持

在编程开发领域,GPT-4凭借其强大的自然语言理解和代码生成能力,能够深刻理解开发者的意图,并基于这些需求提供精准的编程指导和解决方案。对于开发者来说,GPT-4能够在代码片段生成、算法思路设计、模块构建和原型实现等方面给予开…

H5 个人引导页带赞助版源码

H5 个人引导页带赞助版源码 源码介绍:一款带有4个选项的H5自适应引导页,右侧有QQ和微信联系按钮。带有三个赞助按钮。 下载地址: https://www.changyouzuhao.cn/9883.html