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 전송율 테스트에서 확인 할 수 있다.
반응형