stm32芯片的SPI接口調試總結之輪詢模式

一 概念

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發送端沒啥問題,可作爲接收端,就有諸多不方便了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章