一 概念
1 组成
SPI系统可直接与各个厂家生产的多种标准外围器件接口,它只需4条线:串行时钟线(SCK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)和低电平有效的从机选择线(NSS)。 (1)MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。 (2)MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。 (3)SCK:串口时钟,作为主设备的输出,从设备的输入。 (4)NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为片选引脚,让主设备可以单独地与特定从设备通信,避免数据线上的冲突。 2 工作模式 SPI有主从两种工作方式。在主模式下,SPI为其他节点的SPICLK引脚提供串行时钟,数据从SPISIMO引脚输出,从SPISOMI引脚输入。 在从动方式下,数据从SPISOMI引脚移出并由SPISIMO引脚移入。SPICLK引脚作为串行移位时钟的输入。 二 源码解析 master端的源码:#include "main.h" SPI_HandleTypeDef hspi1;#define DATA_SIZE 64 uint8_t TX_Data[DATA_SIZE];
void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_SPI1_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI1_Init(); HAL_SPI_Transmit(&hspi1, TX_Data, sizeof(TX_Data), 5000); while (1) { } }
2 slave源码解析
#include "main.h"
SPI_HandleTypeDef hspi1;
UART_HandleTypeDef huart2;
uint8_t RX_Data[70] = {0};
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);
static void MX_USART2_UART_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
MX_USART2_UART_Init();
HAL_SPI_Receive(&hspi1, RX_Data, sizeof(RX_Data), 5000);
HAL_UART_Transmit(&huart2, RX_Data, sizeof(RX_Data), 5000);
while (1)
{
}
}
三 调试总结
1 硬件接口
硬件接口一定要确认是通的,可以先用软件来驱动GPIO来测试一下。
2 工作方式
轮询的工作方式最简单,它作master发送端没啥问题,可作为接收端,就有诸多不方便了。
三 调试总结
1 硬件接口
硬件接口一定要确认是通的,可以先用软件来驱动GPIO来测试一下。
2 工作方式
轮询的工作方式最简单,它作master发送端没啥问题,可作为接收端,就有诸多不方便了。
标签:引脚,轮询,MX,stm32,SPI,Init,Data,void From: https://www.cnblogs.com/dylancao/p/18019066