STM32 HAL库 SPI主从机通信

STM32 HAL库 SPI主从机通信

1.简介

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

image-20220809084117128

SPI有4中通信格式,
在这里插入图片描述在这里插入图片描述

实验采用的平台为STM32F429为主机,STM32F103为从机进行数据通信。

2.工程

整体的通信思路是主机首先给从机发送一个字节的通信开始命令,从机接收到命令之后回复一个字节的确认信号,然后主句发送32字节的数据,从机接收到数据之后再通过SPI发送回主机,主机接收到数据之后通过串口发送,以此检验SPI的发送和接收是否正确。

2.1主机工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yCSukDmL-1660010618842)(https://raw.githubusercontent.com/Master-4869/pictures/main/image-20220809085927005.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 
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值