【STM32 CubeMX】SPI HAL库编程

这篇具有很好参考价值的文章主要介绍了【STM32 CubeMX】SPI HAL库编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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


一、CubeMX配置SPI Flash

首先,选择任意的一个SPI
【STM32 CubeMX】SPI HAL库编程,从0带你学会如何像人类一样写STM32程序,stm32,嵌入式硬件,单片机,mcu,c,CubeMX,c++
接下来,把SPI的参数调成下面这样:
【STM32 CubeMX】SPI HAL库编程,从0带你学会如何像人类一样写STM32程序,stm32,嵌入式硬件,单片机,mcu,c,CubeMX,c++
SPI对应的引脚如下:
【STM32 CubeMX】SPI HAL库编程,从0带你学会如何像人类一样写STM32程序,stm32,嵌入式硬件,单片机,mcu,c,CubeMX,c++
但是这里并没有片选引脚,片选引脚需要我们自己去选择一个GPIO作为片选引脚。

选择一个GPIO作为CS片选引脚,GPIO模式为输出模式:
【STM32 CubeMX】SPI HAL库编程,从0带你学会如何像人类一样写STM32程序,stm32,嵌入式硬件,单片机,mcu,c,CubeMX,c++
接下来生成代码即可。

二、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
【STM32 CubeMX】SPI HAL库编程,从0带你学会如何像人类一样写STM32程序,stm32,嵌入式硬件,单片机,mcu,c,CubeMX,c++
如果传输完成或出错,如下回调函数会被调用:

/* 发送、接收完成回调函数 */
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里面这样设置:
【STM32 CubeMX】SPI HAL库编程,从0带你学会如何像人类一样写STM32程序,stm32,嵌入式硬件,单片机,mcu,c,CubeMX,c++
如果传输完成或出错,如下回调函数会被调用:

/* 发送、接收完成回调函数 */
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 编程的基本方法,为自己的项目开发提供了便利。文章来源地址https://www.toymoban.com/news/detail-825685.html

到了这里,关于【STM32 CubeMX】SPI HAL库编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Note10:基于STM32H7+HAL+CubeMX+DMA+SPI+串口中断+定时器+RTC的多传感器数据采集系统(2*ADXL355和ADXL375通过Sync时序同步)

    本文的初衷一方面是将我的一些关于STM32开发方面浅显的个人经验分享给初学者、并期望得到大佬的批评指正,另一方面是记录自己的实验过程便于回顾。 我预感应该要写很多,不过鉴于之前的数篇笔迹中,对于SPI/DMA/ADXL3XX系列加表的使用已经详细描述过了,所以这篇博客只

    2024年02月10日
    浏览(54)
  • 江涛带你玩STM-CubeMx之OLED使用3线SPI和4线SPI驱动详解

    江涛带你玩STM-CubeMx之实战硬件SPI和硬件IIC驱动OLED 江涛带你玩STM-CubeMx之实战驱动温湿度模块--DTH11 江涛带你玩0.96-OLED之实战stm32的RTC时钟(上)

    2023年04月08日
    浏览(32)
  • 【11】STM32·HAL库开发-STM32CubeMX简介、安装 | 新建STM32CubeMX工程步骤

      STM32CubeMX是ST开发的一款图形配置工具,可通过配置自动生成 初始化代码 (并不包括逻辑代码)。以下是STM32CubeMX官方宣传图片,适用于Windows和macOS系统,用于生成初始化代码,一个图形配置工具,搭配不同系列的STM32Cube固件包,即可支持不同系列的STM32芯片,初始化代码

    2024年02月17日
    浏览(64)
  • STM32 HAL库 STM32CubeMx -- 外部中断

    中断,是指处理机处理程序运行中出现的紧急事件的整个过程。程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,处理机立即中止现行程序的运行,自动转入相应的处理程序(中断服务程序),待处理完后,再返回原来的程序运行,这整个过程称为程序

    2024年02月08日
    浏览(47)
  • STM32 HAL库 STM32CubeMX -- ADC

    ADC(Analog-to-Digital Converter)指模/数转换器或者模拟/数字转换器。 是指将连续变量的模拟信号转换为离散的数字信号的器件。 也就是将 模拟信号 转化为 数字信号 。 STM32f103 系列有3 个ADC,精度为12 位,每个ADC 最多有16 个外部通道和2个内部信号源。其中ADC1 和ADC2 都有16 个外部

    2024年02月15日
    浏览(44)
  • 【HAL库】HAL库STM32cubemx快速使用

    软件:keil5、STM32Cubemx 硬件:淘宝的STM32F103C8T6最小系统 1 新建工程 2 配置RCC 选择外部时钟源。 设置外部晶振输入值,我这块板子是8M。 然后手动输入最大时钟频率,然后回车让他自动配置时钟树。我这块板子是72M。 3 配置SYS 我的下载器是SWD两根线的,所以我选这个。(一定

    2023年04月20日
    浏览(50)
  • STM32 HAL库 STM32CubeMX -- PWM(呼吸灯)

    PWM (Pulse Width Modulation)就是对外输出脉宽(即占空比)可调的方波信号,简称脉宽调制; 信号频率由自动重装寄存器ARR 的值决定,占空比由比较寄存器CCR 的值决定。 PWM模式1 : 在向上计数时 ,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平; 在向下计数时 ,一旦

    2024年02月01日
    浏览(57)
  • 【STM32 CubeMX】SPI层次结构SPI协议与SPI控制器结构

    随着嵌入式系统的迅猛发展,STM32系列微控制器在各种应用中得到广泛应用。在嵌入式系统设计中,串行外设接口(SPI)是一种常见且重要的通信协议。为了更便捷地配置和使用SPI,STMicroelectronics提供了一款强大的工具——STM32 CubeMX。本文将着重介绍STM32 CubeMX中SPI的层次结构

    2024年02月20日
    浏览(46)
  • STM32 HAL库 STM32CubeMX -- IWDG(独立看门狗)

    看门狗(Watchdog)就是MCU上的一种特殊的定时器,用于监视系统的运行,在发生错误(例如程序出现死循环)时,能触发一个中断或产生系统复位,防止程序跑飞。STM32 有两个看门狗,一个是独立看门狗另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看门狗号称警犬。 独立看

    2024年02月19日
    浏览(64)
  • STM32 HAL库 STM32CubeMX -- TIM(定时器中断)

    STM32F1 系列中,除了一些特殊的型号,大部分F1有8 个定时器,分为 基本定时器,通用定时器和高级定时器 。 基本定时器TIM6 和TIM7 是一个16 位的只能向上计数的定时器,只能定时,没有外部IO。 通用定时器TIM2/3/4/5 是一个16 位的可以向上/下计数的定时器,可以定时,可以输出

    2024年02月16日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包