#STM32G STM32CubeIDE 를 이용한 개발환경 설정 및 성능 테스트
[STM32G031-SSM] 보드를 이용하여 개발 환경 설정 및 STM32G0의 성능 테스트를 해 보았다.
처음에 STM32CubeMx를 이용하여 코드를 생성하려고 진행 했는데.. 설정 다 하고 코드 생성하려는 순간 STM32G 시리즈는 CubeMx에서 지원을 하지 않는다고 한다.
알아보니 STM32CubeIDE를 이용하라고 한다.
STM32CubeIDE로 STM32G시리즈 선택해서 새로운 프로젝트를 생성
핀맵 설정
CubeMx와 거의 동일하게 동작하는것 같다.
STM32CubeIDE 클럭 설정
최대 64Mhz까지 설정 가능하다.
기본 설정 완료후 STM32CubeIDE에서 저장 하면 기본 코드가 생성된다.
[STM32G031-SSM] 보드에는 PA5에 LED가 연결되어 있으므로 GPIO토글 속도 측정을 해 보자
while (1)
{
/* USER CODE END WHILE */
GPIOA->BSRR = GPIO_PIN_5;
GPIOA->BRR = GPIO_PIN_5;
/* USER CODE BEGIN 3 */
}
25ns(16Mhz) 정도 출력 된다.
Delay를 주어 STM32G0의 GPIO 토글 시간만 측정해 보았다.
68ns 가 나온다.
while (1)
{
/* USER CODE END WHILE */
GPIOA->BSRR = GPIO_PIN_5;
GPIOA->BRR = GPIO_PIN_5;
HAL_Delay(1);
/* USER CODE BEGIN 3 */
}
이상한데... 어샘코드를 보니 HAL_Delay가 두번 들어가 있다. 컴파일러 오류 인가?
GPIOA->BSRR = GPIO_PIN_5;
800030c: 341f adds r4, #31
800030e: 61ac str r4, [r5, #24]
HAL_Delay(1);
8000310: 2001 movs r0, #1
GPIOA->BRR = GPIO_PIN_5;
8000312: 62ac str r4, [r5, #40] ; 0x28
HAL_Delay(1);
8000314: f000 f8a8 bl 8000468 <HAL_Delay>
8000318: e7f9 b.n 800030e <main+0x62>
800031a: 46c0 nop ; (mov r8, r8)
800031c: 40021000 .word 0x40021000
HAL_Delay()를 앞쪽으로 해서 실행 하면 23ns가 정상 출력된다.
while (1)
{
/* USER CODE END WHILE */
HAL_Delay(1);
GPIOA->BSRR = GPIO_PIN_5;
GPIOA->BRR = GPIO_PIN_5;
/* USER CODE BEGIN 3 */
}
어샘 코드도 정상이다.
800030c: 341f adds r4, #31
HAL_Delay(1);
800030e: 2001 movs r0, #1
8000310: f000 f8aa bl 8000468 <HAL_Delay>
GPIOA->BSRR = GPIO_PIN_5;
8000314: 61ac str r4, [r5, #24]
GPIOA->BRR = GPIO_PIN_5;
8000316: 62ac str r4, [r5, #40] ; 0x28
8000318: e7f9 b.n 800030e <main+0x62>
800031a: 46c0 nop ; (mov r8, r8)
800031c: 40021000 .word 0x40021000
결론적으로 STM32G0 의 GPIO토글 속도는 23ns 정도 된다. 비슷한 클럭의 STM32F103 의 GPIO토글 속도와 비교해서 더 좋은것 같다. 가격도 저렴하고 성능도 나쁘지 않은것 같다.
1$대 MCU에서 크기도 작고 성능 면에서 최고 인것 같다.
혹시해서 설정을 다시 보니 SPEED가 GPIO_SPEED_FREQ_LOW로 되어 있다.
GPIO_SPEED_FREQ_VERY_HIGH로 설정하니 정상적으로 출력디 된다.
/*Configure GPIO pin : PA5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
결국 STM32G0의 GPIO 토글 속도는 15ns(16Mhz) 로 빨라졌다.
속도가 빨라진 것은 옵티마이즈 옵션을 -Os 로 설정한 것 때문인것 같다.