#STM32G STM32CubeIDE 를 이용한 개발환경 설정 및 성능 테스트
![](https://t1.daumcdn.net/cfile/tistory/998C163A5E4AE9650A)
[STM32G031-SSM] 보드를 이용하여 개발 환경 설정 및 STM32G0의 성능 테스트를 해 보았다.
처음에 STM32CubeMx를 이용하여 코드를 생성하려고 진행 했는데.. 설정 다 하고 코드 생성하려는 순간 STM32G 시리즈는 CubeMx에서 지원을 하지 않는다고 한다.
알아보니 STM32CubeIDE를 이용하라고 한다.
STM32CubeIDE로 STM32G시리즈 선택해서 새로운 프로젝트를 생성
![](https://t1.daumcdn.net/cfile/tistory/999E9B505F2CDE5F03)
![](https://t1.daumcdn.net/cfile/tistory/99124C3E5F2CDE5F07)
핀맵 설정
CubeMx와 거의 동일하게 동작하는것 같다.
![](https://t1.daumcdn.net/cfile/tistory/99FD7D335F2CDE5F05)
STM32CubeIDE 클럭 설정
최대 64Mhz까지 설정 가능하다.
![](https://t1.daumcdn.net/cfile/tistory/9925253D5F2CDE5F04)
기본 설정 완료후 STM32CubeIDE에서 저장 하면 기본 코드가 생성된다.
[STM32G031-SSM] 보드에는 PA5에 LED가 연결되어 있으므로 GPIO토글 속도 측정을 해 보자
![](https://t1.daumcdn.net/cfile/tistory/996E714A5F20E2B32C)
while (1)
{
/* USER CODE END WHILE */
GPIOA->BSRR = GPIO_PIN_5;
GPIOA->BRR = GPIO_PIN_5;
/* USER CODE BEGIN 3 */
}
25ns(16Mhz) 정도 출력 된다.
![](https://t1.daumcdn.net/cfile/tistory/99CAA63A5F48A24713)
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) 로 빨라졌다.
![](https://t1.daumcdn.net/cfile/tistory/99F16737600A75061D)
속도가 빨라진 것은 옵티마이즈 옵션을 -Os 로 설정한 것 때문인것 같다.
![](https://t1.daumcdn.net/cfile/tistory/99833F45600A756D1F)