STM32 HAL库 SPI主从机通信
1.简介
SPI可以实现全双工通信,分为主器件和从器件,主器件发起时钟控制通信的开始和结束,从器件只能被动等待住器件发起通信。如果主器件一直不发起通信,没有时钟产生,从器件是没办法发送数据的,只有主器件产生了时钟之后从器件才能将寄存器中的数据移位发送出来。

SPI有4中通信格式,


实验采用的平台为STM32F429为主机,STM32F103为从机进行数据通信。
2.工程
整体的通信思路是主机首先给从机发送一个字节的通信开始命令,从机接收到命令之后回复一个字节的确认信号,然后主句发送32字节的数据,从机接收到数据之后再通过SPI发送回主机,主机接收到数据之后通过串口发送,以此检验SPI的发送和接收是否正确。
2.1主机工程
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yCSukDmL-1660010618842)(https://raw.githubusercontent.com/Master-4869/pictures/main/image-20220809085927005.png)]](/https://i-blog.csdnimg.cn/blog_migrate/5394f3bfc7b0e1d6c2da155bc837cbf8.png)
在cubeMX中配置SPI时,CPHA不是0和1,反而是1和2,这里1对应的就是CPHA=0,在第一个时钟边沿捕获数据。
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "dma.h"
#include "rng.h"
#include "spi.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
uint32_t random[32] = {
0};
uint8_t random_8[32] = {
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};
uint8_t random_8_1[8] = {
0x05,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b};
uint8_t rece_data[32] = {
0};
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
void Delay_us(__IO


1924

被折叠的 条评论
为什么被折叠?



