본문 바로가기

[ST_MICRO]/STM32F4

[STM32F4] 속도 측정 - GPIO 토글 속도 테스트

[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




레지스터를 접근해서 포트 토글 해 보면 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 정도 측정이 된다.









반응형