STM32CubeIDE 를 이용해서 STM32G031의 SPI DMA 테스트를 진행 해 보자.
우선 STM32CubeIDE에서 STM32G031용 프로젝트를 생성하고 기본 페리를 설정한다.
SPI 클럭은 최대 32Mhz 까지 가능하다.
SPI DMA 채널을 추가
SPI DMA 인터럽트 추가
GPIO 핀 스피드 설정
SPI클럭을 최대 주파수로 사용하기 때문에 GPIO 스피드 설정도 VeryHigh 로 설정해 주어야 한다.
STM32G031 SPI DMA 처기 테스트 코드
일반 SPI통신과 DMA 통신의 차이를 확인하기 위해 두가지 방식이 가능하도록 코드를 작성 했다.
#define _SPI_DMA_USE 1
#define hSPI hspi2
#define SPIx_TIMEOUT_MAX ((uint32_t)0x1000)
void SPI_WriteBuf(unsigned char *pDataBuf, unsigned int Size)
{
#if _SPI_DMA_USE
HAL_SPI_Transmit_DMA(&hSPI, pDataBuf, Size);
#else
HAL_SPI_Transmit(&hSPI, pDataBuf, Size, SPIx_TIMEOUT_MAX);
#endif
}
STM32G0의 일반 SPI 통신 속도는 SPI 데이터 사이 간격이 920ns로 측정된다.
STM32G031에서 DMA 방식을 이용하여 SPI 통신을 할경우 340ns로 3배 정도 속도가 빨라진 것을 확인 할 수 있다.
반응형