stm32 SPI DMA通信の送信効率

Page content

STM32マイコンのSPI通信の実行速度について検証しました。 SPI clock = 10MHz, 通常送信(1バイトづつ断続)とDMA送信(連続)で、3 bytes送信時の比較です。

Result

DMA通信は通常のバイト送信と比較して2倍速となりました。これからはDMA通信一筋でやります :-)

  • SPI-TX, 3 bytes at 10MHz = 4.5 usec
  • SPI-TX(DMA), 3 bytes at 10MHz = 2.5 usec

CubeMXから Configuration-ConnecticityにあるSPI設定パネルのDMAを有効にしてから、このHAL APIを呼び出すだけで実行できます。

Environment

  • Board: ST Microelectronics NUCLEO-F401RE
  • Code generator : STM32CubeMX (free)
  • IDE : AC9, System Workbench for STM32 (free, GNU)

Code

uint8_t spi_tx_buff[3]={0xFF,0x00,0xA5};
HAL_SPI_Transmit_DMA(&hspi3,(uint8_t *)spi_tx_buff,sizeof(spi_tx_buff));

// &hspi3 = 割り当てたリソース名(ハンドラ)CubeMXが名付けているみたいです。

Stimulus

SPI 通常送信(3 bytes 0xFF 0x00 0xA5, 10MHz)

SPI DMA送信(3 bytes 0xFF 0x00 0xA5, 10MHz)

Configuration at Cube MX