한국어
Embedded
 

PlatformIO를 이용한 첫번째 프로젝트로 LED를 제어(Blink) 해본다.

개발환경은 윈도우에서 Visual Studio Code + PlatformIO를 구성하였다.

 

Visual Studio Code를 실행하고 하단에 home버튼을 클릭하면 platformIO의 홈화면으로 전환된다.

home.png

 

New Project를 클릭한다.

new_project.png

 

프로젝트 생성은 매우 간단한데 먼저 프로젝트 이름을 입력한다. 

다음으로 지원하는 개발보드(Board) 또는 MCU를 선택하면 사용 가능한 Framework까지 선택 할 수 있다.

Framework는 프로젝트 성격에 따라 License를 고려하여 선택하면 된다. (여기서는 libOpenCM3를 사용하였다.)

설정 후 Finish를 클릭하면 프로젝트 생성이 마무리된다. 

Project_Wizard.png

 

소스 코드 작성을 위해 "src"에 마우스 오른쪽 버튼메뉴에서 New File을 클릭한다.

new_file.png

 

"main.cpp" 이라는 이름으로 소스코드를 추가하였다.

add_main.cpp.png

 

main.cpp에 LED를 깜빡이는 코드를 작성한다. 

다음은 간단한 예제소스이다.

#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>

static void gpio_setup(void)
{
    /* Enable GPIO clock. */
    /* Using API functions: */
    rcc_periph_clock_enable(RCC_GPIOB);
    /* Set pin to 'output push-pull'. */
    /* Using API functions: */
    gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO11);
}

int main(void)
{
    int i;
    gpio_setup();
    /* Blink the LED on the board. */
    while (1) {
        /* Using API function gpio_toggle(): */
        gpio_toggle(GPIOB, GPIO11); /* LED on/off */
        for (i = 0; i < 1000000; i++) { /* Wait a bit. */
            __asm__("nop");
        }
    }

    return 0;
}

 

소스코드의 간단한 설명

 

APB2 peripheral clock enable register (RCC_APB2ENR)

현재 개발중인 Board에서 LED가 GPIO B11 Port에 연결되어있는데 GPIO를 제어하려면 기본적인 설정이 필요하다.

아래 그림은 STM32 시스템 아키텍처인데 GPIO에 APB2로 연결되어 있음을 알 수 있다. 이것은 GPIO를 사용하기 위해서 APB2에 연결된 쪽으로 클럭을 Enable시켜줘야 한다는 의미다. 그래서 위 예제 소스코드에서 짐작 할 수 있듯이 rcc_periph_clock_enable 함수를 통해 RCC_APB2ENR 레지스터에 값을 설정해준것이다.

system_architecture.png

 

그 다음 gpio_toggle 함수를 통해 B11 포트를 토글하여 LED를 깜빡이게 한다.(libOpenCM3을 사용한 이유가 이런 편리한 함수들을 제공하기 때문이다.)

 

이제 프로젝트를 빌드해보자. 하단 메뉴에서 Build를 클릭한다.

build.png

 

잠시 후 빌드가 완료되고 프로젝트경로\.pio\build\genericSTM32F103RE 에 다음과 같이 바이너리 파일이 생성된다.

bin.png