一 概念
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发送端没啥问题,可作为接收端,就有诸多不方便了。
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |