본문 바로가기

[ST_MICRO]/STM32G4

[STM32G4 SM] STM32G431 - STM32CubeIDE 에서 SPI DMA 테스트

STM32CubeIDE 를 이용하여 STM32G431  프로젝트를 생성하고 SPI설정을 한다.

STM32G431의 SPI 최대 클럭속도는 스펙상 75Mhz까지 가능하다. 

 

 

SPI를 통해 2바이트를 연속해서 전송하는 코드로 SPI 전송 지연시간을 측정해 보자.

  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_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_SPI_Transmit(&hspi1, buf, sizeof(buf), 0xFFFF);

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

 

 

50ns 정도의 지연이 발생한다. 짧긴한데... 


STM32G4의 DMA로 구동해 보자

STM32G4의 SPI DMA 사용을 위해 DMA RX, TX Request 설정을 추가 한다.

 

 

DMA추가후 SPI 통신을 해 보자

  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_SPI_Transmit(&hspi1, buf, sizeof(buf), 0xFFFF);
      
    HAL_SPI_Transmit_DMA(&hspi1, buf, sizeof(buf));
    HAL_SPI_Transmit_DMA(&hspi1, buf, sizeof(buf));
    HAL_Delay(10);
  }
  /* USER CODE END 3 */
}

 

적용 결과 별 차이가 없는데...

SPI설정을 변경하니 딜레이 없이 출력되는것이 확인된다.

반응형