STM32 通过HAL库实现双机SPI程序烧录之一SPI双机通信

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

 一、实现SPI双机通信

主要功能:STM32F407VET6作为主机,STM32F103ZET6作为从机实现F4通过SPI接口发送数据给F1进行串口打印功能

主要是使用STM32cubemx进行相关配置(使用这个软件不能只用于生成代码,要学会读懂生成的每一句代码这样才方便后期调试,不然出现问题根本找不到)

二、主机F4相关配置

1、配置SYS

选择Serial Waire进行调试(通常都选这个)

hal库spi,stm32,单片机,嵌入式硬件

2、配置RCC

hal库spi,stm32,单片机,嵌入式硬件

3、配置串口

配置波特率(并未开启串口中断,不需要使用) 

hal库spi,stm32,单片机,嵌入式硬件

串口重定向(方便使用printf进行打印,这里我添加在usart.c文件夹下)

#include "usart.h"

/* USER CODE BEGIN 0 */
#include "stdio.h"
struct __FILE 
{ 
	int handle; 
}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 	
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
	USART1->DR=(uint8_t)ch;      
	return ch;
}
/* USER CODE END 0 */

UART_HandleTypeDef huart1;

/* USART1 init function */

4、配置SPI接口

配置模式未主机模式,开启NSS位进行片选(可以增加稳定性)

hal库spi,stm32,单片机,嵌入式硬件

IO端口:

hal库spi,stm32,单片机,嵌入式硬件

注:注意SPI的极性和相位要和从机保持一致

5、配置时钟树

直接选择最大即可

hal库spi,stm32,单片机,嵌入式硬件

6、代码部分

在while循环直接添加

	uint8_t data[5] = {0x00,0x11,0x22,0x33,0x44};
	
	for(int i=0; i<fnum;i++)
	{
		HAL_SPI_Transmit_DMA(&hspi1,&ReadBuffer[i],1);
		HAL_Delay(1);
	}

至此,F4部分基本配置完成,接下来才是重点!!

三、从机F1相关配置

1、配置SYS

同上

2、配置RCC

同上

3、配置串口

同上

4、SPI配置

选择从机模式,输入片选,以及极性和相位

hal库spi,stm32,单片机,嵌入式硬件

5、开启SPI中断相关

开启SPI中断,从机主要是采取中断的方式进行接收

hal库spi,stm32,单片机,嵌入式硬件

6、时钟树配置

 同意配置最大即可hal库spi,stm32,单片机,嵌入式硬件

 生成代码,进入代码内部进行编写

7、修改中断函数

在stm32f1xx_it.c文件下找到SPI2_IRQHandler添加一下内容及开启中断重复接收

hal库spi,stm32,单片机,嵌入式硬件

/**
  * @brief This function handles SPI2 global interrupt.
  */
void SPI2_IRQHandler(void)
{
  /* USER CODE BEGIN SPI2_IRQn 0 */

  /* USER CODE END SPI2_IRQn 0 */
  HAL_SPI_IRQHandler(&hspi2);
  /* USER CODE BEGIN SPI2_IRQn 1 */
	while(HAL_SPI_Receive_IT(&hspi2,(uint8_t *)spi_buffer, RXBUFFERSIZE) != HAL_OK)
	{

	}
  /* USER CODE END SPI2_IRQn 1 */
}

编写中断回调函数

hal库spi,stm32,单片机,嵌入式硬件

 添加在stm32f1xx_it.c最后即可

void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef* spiHandle)
{
	if(spiHandle->Instance == SPI2)
	{
		if(spi_rx_cnt < SPI_REC_LEN)
		{
			ReadBuffer[spi_rx_cnt] = spi_buffer[0];
			spi_rx_cnt++;
			printf("buffer: 0x%x\r\n",spi_buffer[0]);
		}
	}
}

8、主函数添加

HAL_SPI_Receive_IT(&hspi2,(uint8_t *)spi_buffer, RXBUFFERSIZE);

至此从机相关也编写完毕,在SPI回调函数中,会打印接收到的内容如下:

hal库spi,stm32,单片机,嵌入式硬件

 出现已下现象即可表明通信成功!!!完成了SPI双机烧录的第一步,下一章讲讲解STM32从SD卡读取bin文件并通过SPI接口发送给从机

需要源代码的请留言,创造不易欢迎点赞收藏,感谢支持文章来源地址https://www.toymoban.com/news/detail-717383.html

到了这里,关于STM32 通过HAL库实现双机SPI程序烧录之一SPI双机通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【STM32L496】使用HAL库实现SPI写入/读取数据(AD5421)

    SPI协议详解(图文并茂+超详细) SPI超详细解析 【STM32笔记】HAL库中的SPI传输(可利用中断或DMA进行连续传输) AD5421是一款集成器件,设计用于环路供电型4-20mA智能发射器应用。AD5421在单芯片内提供如下特性和功能:16位DAC和电流放大器,用于对环路电流进行数字控制;用于

    2024年02月03日
    浏览(75)
  • STM32 HAL库 CAN双机通信接收无法进入中断、中断没有反应的解决方法

    在调试HAL库下的CAN双机(双F103ZET6)通信时,阻塞轮询接收完全正常,但是中断接收没有反应。翻看了GL的烧脑之路总结(一):Cubemx创建CAN通信工程,无法进入CAN中断的原因这篇文章以后,核实自己的硬件电路没有问题,于是对自己的工程文件进行整理,把 ①HAL_CAN_ConfigFi

    2024年02月04日
    浏览(59)
  • STM32 HAL库 STM32CubeMX -- SPI

    SPI (Serial Peripheral Interface)协议,即串行外围设备接口,是一种高速全双工的通信总线。 它被广泛地使用在ADC、LCD 等设备与MCU 间,要求通讯速率较高的场合。 SPI 通讯使用3 条总线及片选线, 3 条总线分别为SCK、MOSI、MISO,片选线为SS(CS) ,它们的作用介绍如下: (1) SS( Slav

    2024年02月13日
    浏览(47)
  • STM32通过HAL库实现DMX512控制灯

    关于DMX512协议的解释下面这篇文章写的十分详尽: 链接:作者:夏沫の浅雨 通过串口模拟 通过上文我们可以得知,数据帧需要 1位低电平+8位数据位+2位高电平 ,这种格式与串口通信协议的格式可以说是几乎一模一样,因为平日基本上都是使用串口8N1格式。因此,若是不考虑

    2024年04月12日
    浏览(26)
  • 【STM32 CubeMX】SPI HAL库编程

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

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

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

    2024年02月10日
    浏览(49)
  • [HAL]STM32 SPI+DMA驱动WS2812

    该程序是纯手敲,非Cube生成!所有代码均注释。 源码在文章后面获取 Keyword: 单线通讯、归零码、Reset、RGB顺序 RGB一共有24bit位 -相当于驱动一个灯要24bit位 -驱动若干个灯要24* n bit位,通过Reset码决定数据终止(保持) 24bit位应该如何发送? 可见: 表示低电平需要 T0H和T0L的配

    2024年02月09日
    浏览(48)
  • STM32的HAL库SPI操作(master 模式)-根据时序图配置SPI

    SPI基本概念请自行百度,参考:百度百科SPI简介.我们讲重点和要注意的地方。 接线一一对应 也就是说主控的MISO,MOSI,SCLK,[CSn]分别和设备的MISO,MOSI,SCLK,[CSn]一一对应相连,不交叉,不交叉,不交叉…(重要的事情说三遍)。 这是无线模块CC2500的SPI接口时序,这里可以看到,从

    2024年02月06日
    浏览(39)
  • 【STM32+HAL】语音识别模块LD3320(SPI版)

    有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置 1、芯片: STM32F103C6T6(同C8T6) 2、STM32CubeMx软件 3、语言识别模块:LD3320(SPI版) 实现串口打印语音输入 1、SPI功能开启 2、IO口配置 3、中断配置 至此,HAL库配置完成 1、LD3320.C 2、LD3320.H 3、主函数 若要

    2024年02月19日
    浏览(39)
  • stm32 AD7606 芯片驱动 hal库 spi通讯

             这两天用来个ad7606 的芯片,结果硬件出来个问题,花了不少时间看这个芯片手册,干脆分享一下。         OS0 OS1 OS2         这个三个引脚用于配置芯片的采样频率,只要不设置为111即可正常采样; CONVSTA CONVSTB 这两个引脚用于启动芯片采集转换,默认高电平,

    2024年04月26日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包