Skip to main content
Lead
July 30, 2021
Solved

Is HAL_SPI_Transmit_DMA faster than HAL_SPI_Transmit?

  • July 30, 2021
  • 7 replies
  • 2381 views

Hi!

Is HAL_SPI_Transmit_DMA faster than HAL_SPI_Transmit?

If yes: Do I need to enable DMA for the SPI to make this work?

This topic has been closed for replies.
Best answer by PMath.4

Setting up DMA takes time so will always be slower for small transfers. For larger transfers DMA is better but only if there is something else you want to do while the transfer is happening. Otherwise speed will be the same.

7 replies

Rookie38
Associate III
July 30, 2021

Hello,

Yes, transferring larger amounts of data is faster using DMA. The data transfer process is outsourced to the DMA controller and the MCU can continue working. Again, yes, DMA must be configured for use with the specific SPI bus. You should give a look at the CubeRepository examples:

For example for STM32F4 Series:

..\STM32Cube\Repository\STM32Cube_FW_F4_V1.26.1\Projects\STM32F429I-Discovery\Examples\SPI

There are three examples for SPI communication via polling, interrupt and DMA available.

DMårtAuthor
Lead
July 30, 2021

Thank you. I tried with HAL_SPI_Transmit_DMA and it was much slower than HAL_SPI_Transmit.

In this case, I transfered maximum 1 to 4 bytes of data.

STM32MP151AAC3 custom board with STM32-OS as operating system: https://github.com/DanielMartensson/STM32-ComputerSTM32MP257FAK3 custom board with STM64-OS as operating system: https://github.com/DanielMartensson/STM64-Computer
MM..1
Super User
July 31, 2021

Your question isnt right. Speed of SPI is defined aka clock. Little change is interword times when is used IRQ vs DMA.

Your code must have fail when dont work...

PMath.4
PMath.4Best answer
Senior III
August 1, 2021

Setting up DMA takes time so will always be slower for small transfers. For larger transfers DMA is better but only if there is something else you want to do while the transfer is happening. Otherwise speed will be the same.