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설정을 변경하니 딜레이 없이 출력되는것이 확인된다.
반응형