본문 바로가기

[ST_MICRO]/STM32F4

[STM32-64 Ardu] STM32F405 -STM32CubeIDE에서 SPI DMA 속도 테스트

STM32F405 보드의 SPI 전송 테스트를 SPI DMA 와 비교해서 테스트 해보자

 

먼저 STM32CubeIDE를 이용하여 새로운 프로젝트를 생성하고 SPI 세팅을 한다.

 

SPI DMA를 사용하지 않고 일반 모드로 구동 해 보자

unsigned char buf[10] = {1,2};
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_SPI1_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  HAL_SPI_Transmit(&hspi1, buf, sizeof(buf), 0xFFFF);

	  HAL_Delay(10);
  }
  /* USER CODE END 3 */
}

 

SPI DMA를 사용하지 않으면 SPI 출력 간격이 200ns정도로 측정이 된다.

 

 

STM32 SPI DMA 사용을 위해 SPI1_TX 를 추가 한다.

 

DMA로 데이터 전송하기 위해 HAL_SPI_Transmit_DMA() 함수를 이용 하여 전송한다.

HAL_SPI_Transmit_DMA(&hspi1, buf, sizeof(buf));

 

STM32F405 에서 SPI DMA를 사용하면 딜레이 없이 데이터가 전송되는 것을 확인 할 수 있다.

 

SPI DMA 효과를 최대한 적용할 수 있는 활용결과는 W5500 iperf TCP 전송율 테스트에서 확인 할 수 있다.

반응형