STM32双机SPI通信程序烧录教程:使用HAL库实现SPI双机通信

 一、实现SPI双机通信

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

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

二、主机F4相关配置

1、配置SYS

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

2、配置RCC

3、配置串口

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

串口重定向(方便使用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位进行片选(可以增加稳定性)

IO端口:

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

5、配置时钟树

直接选择最大即可

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配置

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

5、开启SPI中断相关

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

6、时钟树配置

 同意配置最大即可

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

7、修改中断函数

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

/**
  * @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 */
}

编写中断回调函数

 添加在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回调函数中,会打印接收到的内容如下:

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

需要源代码的请留言,创造不易欢迎点赞收藏,感谢支持

物联沃分享整理
物联沃-IOTWORD物联网 » STM32双机SPI通信程序烧录教程:使用HAL库实现SPI双机通信

发表评论