一、实现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接口发送给从机文章来源:https://www.toymoban.com/news/detail-717383.html
需要源代码的请留言,创造不易欢迎点赞收藏,感谢支持文章来源地址https://www.toymoban.com/news/detail-717383.html
到了这里,关于STM32 通过HAL库实现双机SPI程序烧录之一SPI双机通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!