DMA:SPI

This tutorial demonstrates: SPI (SPI2) communication via DMA

1、software-hardware

2、Brief principle

2.1、Hardware schematic diagram

image-20231026115837749

2.2、Physical connection diagram

image-20231026122217527

image-20231020093159203

2.3、Principle of control

Using SPI2 to communicate with external Flash (W25Q64), SPI related knowledge will not be introduced, you can see the previous [Chapter 3:3.14 Off-chip Flash] tutorial

STM32F103ZET6 has a total of two DMA controllers, DMA1 has 7 channels, DMA2 has 5 channels;

It is used for high-speed data transfer between peripheral equipment and memory and between memory and memory.

DMA features

The initialization and start of DMA are completed by the CPU, and the transfer process is executed by the DMA controller without the participation of the CPU, so that the CPU resources are saved to do other operations.

DMA1 requests per channel

image-20231021232455032

DMA2 requests per channel

image-20231021232601769

DMA1 channels 4 and 5 are used in this tutorial

3、Engineering configuration

Project Configuration: Prompts for configuration options in the STM32CubeIDE project configuration process

3.1、Notes

Omitted project configuration: New project, chip selection, project configuration, SYS for pin configuration, RCC configuration, clock configuration, and project configuration content

The project configuration part, which is not omitted, is the key point to configure in this tutorial.

3.2、Pin configuration

You can directly select the corresponding pin number in the pin view, and the corresponding option will appear when the mouse is left clicked

c6e2117ec399ce7e45a3af1a4d72cb4d

image-20231026184115145

image-20231026183410528

image-20231026183520841

image-20231026193120059

image-20231026183624230

image-20231026193333072

image-20231030173151391

image-20231020123054441

4、Main function

This section mainly introduces the functional code written by users. Detailed code can be opened by yourself in the project file we provide, and enter the Bsp folder to view the source code. .

4.1、User function

[Chapter 3: Off-chip Flash] Functions introduced are no longer covered

function:SPI_Read_Write_Byte

Function prototypesuint8_t SPI_Read_Write_Byte(uint8_t BYTE)
Functional Description1 byte of data is sent via SPI
Input parametersBYTE:data
Return value0
Tipsdefined DMA_SPI_USE macros used to switch the DMA data transmission or

function:SPI_Write_DMA

Function prototypesuint16_t SPI_Write_DMA(uint8_t *pTxData, uint16_t Size)
Functional DescriptionData is sent via DMA
Input parameters1pTxData:Data head address
Input parameters2Size:Number of bytes of data
Return valueHAL status value:HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT(0-3)

4.2、HAL library function parsing

The HAL library functions that were covered in the previous tutorial will not be covered

function:HAL_DMA_Init

Function prototypesHAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
Functional DescriptionInitialize the DMA controller
Input parametershdma:DMA handle address
Return valueHAL status value:HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT

function:HAL_SPI_TransmitReceive_DMA

Function prototypesHAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA
(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,uint16_t Size)
Functional DescriptionSending and receiving SPI data via DMA mode
Input parameters1hspi:SPI handle address
Input parameters2pTxData:The first address to send data to
Input parameters3pRxData:The first address to receive data
Input parameters4Size:The number of bytes of data sent and received
Return valueHAL status value:HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT

function:HAL_SPI_Transmit_DMA

Function prototypesHAL_StatusTypeDef HAL_SPI_Transmit_DMA
(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Functional DescriptionSPI send function that transfers data using DMA
Input parameters1hspi:SPI handle address
Input parameters2pData:The first address of the data
Input parameters3Size:Number of bytes of data
Return valueHAL status value:HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT

5、Experimental phenomenon

After downloading the program successfully, press the RESET button of the development board to open the serial debugging assistant to observe the phenomenon

phenomenon:

Press RESET button: the serial debugging assistant will print the detection status of the external Flash chip;

Press KEY1: The serial debugging assistant will add 1 to the count value and write the value to the external Flash chip;

Press KEY2: The serial debugging assistant will output the numerical value stored in the specified sector of the external Flash chip;

Press KEY3: The serial debugging assistant will erase the specified sector data.

image-20231102194544551