赞
踩
主要功能:STM32F407VET6作为主机,STM32F103ZET6作为从机实现F4通过SPI接口发送数据给F1进行串口打印功能
主要是使用STM32cubemx进行相关配置(使用这个软件不能只用于生成代码,要学会读懂生成的每一句代码这样才方便后期调试,不然出现问题根本找不到)
选择Serial Waire进行调试(通常都选这个)


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

串口重定向(方便使用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 */

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

IO端口:

注:注意SPI的极性和相位要和从机保持一致
直接选择最大即可

在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部分基本配置完成,接下来才是重点!!
同上
同上
同上
选择从机模式,输入片选,以及极性和相位

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

同意配置最大即可
生成代码,进入代码内部进行编写
在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]);
- }
- }
- }
HAL_SPI_Receive_IT(&hspi2,(uint8_t *)spi_buffer, RXBUFFERSIZE);
至此从机相关也编写完毕,在SPI回调函数中,会打印接收到的内容如下:

出现已下现象即可表明通信成功!!!完成了SPI双机烧录的第一步,下一章讲讲解STM32从SD卡读取bin文件并通过SPI接口发送给从机
需要源代码的请留言,创造不易欢迎点赞收藏,感谢支持
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。