[STM32F4] 속도 측정 - GPIO 토글 속도 테스트
STM32는 Cortex-M4F 코어로 168Mhz로 동작한다. GPIO 토글 테스트로 MCU의 속도를 테스트 해 보았다.
물론 클럭속도가 중요한 요소는 아지만 마이컴에서 GPIO속도는 중요할 때가 많이 있다. STM32F4는 FPU가 있어 DSP기능도 뛰어난것 같다. [참고] MCU속도 측정 결과
또는 STM32 CPU속도 테스트 결과와 비교해 보면 ST시리즈 속도를 확인해 볼 수 있다.
클럭 설정없이 그냥 GPIO On/Off 시키니 10Mhz 출력된다. 느린데..
뭔가 이상한것 같다.
PLL설정후 STM32F4의 GPIO토글 속도는 33Mhz 까지 출력된다.
STM32F103에서 12Mhz가 출력 되었던과 비교하면 확실히 빨라진것을 확인 할 수 있다. 메인클럭이 72Mhz -> 168Mhz로 되었기 때문이다.
STM32F4 클럭 테스트를 위한 코드는 비트제어 방식으로 했고 아래 와 같다.
25 while (1)
26 {
27 Led1On();
\ ??main_1:
\ 00000082 3E83 STRH R6,[R7, #+24]
30 Led1Off();
\ 00000084 7E83 STRH R6,[R7, #+26]
\ 00000086 FCE7 B.N ??main_1
\ ??main_0:
\ 00000088 ........ DC32 GPIO_InitStructure
\ 0000008C 00000240 DC32 0x40020000
\ 00000090 00180240 DC32 0x40021800
26 {
27 Led1On();
\ ??main_1:
\ 00000082 3E83 STRH R6,[R7, #+24]
30 Led1Off();
\ 00000084 7E83 STRH R6,[R7, #+26]
\ 00000086 FCE7 B.N ??main_1
\ ??main_0:
\ 00000088 ........ DC32 GPIO_InitStructure
\ 0000008C 00000240 DC32 0x40020000
\ 00000090 00180240 DC32 0x40021800
레지스터를 접근해서 포트 토글 해 보면 41ns(12Mhz) 정도 측정이 된다.
while (1)
{
GPIOB->ODR ^= GPIO_PIN_1;
}
비트 제어 명령으로 제어 해 보면 10ns(33.5Mhz) 로 측정된다.
while (1)
{
//HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
GPIOB->BSRR = GPIO_PIN_1;
GPIOB->BRR = GPIO_PIN_1;
}
좀더 보기 편하게 하기위해 Delay를 주었다.
while (1)
{
//HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
GPIOB->BSRR = GPIO_PIN_1;
GPIOB->BRR = GPIO_PIN_1;
HAL_Delay(1);
}
On/Off 속도가 9.9ns 정도 측정이 된다.
반응형