Fork me on GitHub

随笔 - 997  文章 - 5  评论 - 181  阅读 - 300万 

一 概念

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发送端没啥问题,可作为接收端,就有诸多不方便了。

posted on   虚生  阅读(287)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2019-02-18 mac-os安装autojump
点击右上角即可分享
微信分享提示