본문 바로가기

[ST_MICRO]/STM32H7

[STM32H7 EVM] STM32H7 Arduino 만들기 - Arduino 성능 측정

STM32 시리즈중 최고의 성능을 구현할 수 있는 STM32H7을 아두이노로 만들면 어떨까?

아두이노의 장점은 다양한 라리브러리를 쉽게 적용하여 사용 할수 있어서 성능과 편리함을 동시에 만족 할 수 있지 않을까...

 

우선 Arduino IDE환경에서 STM32 환경 설정이 되어 있지 않다면 보드 링크를 추가 하고

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

 

 

STM32H7 EVM 보드를 Arduino로 만들기 위해 Arduino 보드메이저에 "Gereic STM32H7 Series" 타입으로 등록 했다. 

 

board.txt 파일을 수정해서 보드 메니저에 등록

# ELAB_H7_EV board

GenH7.menu.pnum.ELAB_H7_EV=ELAB_H7_EV

GenH7.menu.pnum.ELAB_H7_EV.upload.maximum_size=2097152

GenH7.menu.pnum.ELAB_H7_EV.upload.maximum_data_size=524288

GenH7.menu.pnum.ELAB_H7_EV.build.board=ELAB_H7_EV

GenH7.menu.pnum.ELAB_H7_EV.build.product_line=STM32H743xx

GenH7.menu.pnum.ELAB_H7_EV.build.variant=ELAB_H7_EV

 

약간의 핀맵 수정만 해 주면 잘 동작 한다.


STM32H7 Arduino 에서 GPIO 출력 속도를 측정해 보자.

우선 Arduino에서 기본으로 제공하는 GPIO 제어 함수로 속도를 측정해 보면

define LED_BUILTIN     PA5
void setup() 
{
  Serial.begin(115200);
  Serial.print("Stm32H7 Arduino GPIO Speed Test\r\n");

  pinMode(LED_BUILTIN, OUTPUT);
}


void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   //PA5
  digitalWrite(LED_BUILTIN, LOW);  
}

 

56ns 로 다른 MCU 코어를 사용한 Arduino 와 비교해서는 빠른것 같다.

 

 

STM32H7 GPIO 레지스터를 직접 제어 하여 출력 속도를 측정해 보면

define LED_BUILTIN     PA5
void setup() 
{
  Serial.begin(115200);
  Serial.print("Stm32H7 Arduino GPIO Speed Test\r\n");

  pinMode(LED_BUILTIN, OUTPUT);
}


void loop() {
  //digitalWrite(19, HIGH);   //PA5
  //digitalWrite(19, LOW);  

  GPIOA->BSRR = GPIO_PIN_5;
  GPIOA->BSRR = GPIO_PIN_5<<16;
}

 

26ns 로 측정되며 STM32H7 STM32CubeMX HAL 코드로 GPIO출력 속도 측정 속도와 비슷하게 나온다.

 

 


최대 480Mhz로 구동 할수 있는 STM32H743 MCU를 아두이노로 구동하면 성능이 제대로 나올까?

우선 STM32H7 FPU테스트 에 사용했던 코드를 아두이노에서 구동해 보자

 

void loop() {

  d = 0.0;
  Serial.println(d);

  GPIOA->BSRR = GPIO_PIN_5;

  for(i=0;i<10;i++)
  {
    d += sqrt(2.0);
  }

  GPIOA->BSRR = GPIO_PIN_5<<16;

  Serial.println(d);
  delay(10)
}

 

 

결과

0.00

14.14

0.00

14.14

 

측정 결과 1us

옵티마이즈는 -Os

캐시 enable 상태  (캐시 disable 상태에서는 4us 로 측정)

 

왜 이렇게 느리지? 120ns는 나와야 하는데...

FPU 코드변환이 안된건가?

 

 

옵티마이즈는 -O3 로 변경시

1.25us

로 더 느려졌다.

 

 

 

 

 

 

 

 

반응형