펌웨어
2019.08.05 17:36

STM32(Cortex-M3) LED Blink with PlatformIO

조회 수 5410 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

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

 


  1. HelloWorld 커널 모듈과 yocto 레시피 추가 방법

    Date2019.12.09 Category드라이버 Bymakersweb Views10400
    Read More
  2. ESP32 블루투스 스피커(A2DP Sink)

    Date2019.10.29 Category통신 Bymakersweb Views6609
    Read More
  3. ESP-IDF 의 A2DP리뷰 (ESP32)

    Date2019.10.28 CategoryMCU Bymakersweb Views13129
    Read More
  4. 임베디드 리눅스 부팅 절차

    Date2019.10.21 Category운영체제 Bymakersweb Views10705
    Read More
  5. No Image

    mainline 커널 및 etnaviv 를 사용하는 Wandboard(Freescale i.MX6Q)에서 eglfs를 사용

    Date2019.10.17 Category운영체제 Bymakersweb Views5130
    Read More
  6. Yocto를 이용한 wandboard BSP 및 Qt5 SDK 빌드

    Date2019.09.29 Category개발환경 Bymakersweb Views5594
    Read More
  7. STM32 & LibOpenCM3, printf함수사용

    Date2019.08.08 Category펌웨어 Bymakersweb Views5369
    Read More
  8. STM32(Cortex-M3) LED Blink with PlatformIO

    Date2019.08.05 Category펌웨어 Bymakersweb Views5410
    Read More
  9. 블루투스(Bluetooth) 기초

    Date2019.08.02 Category통신 Bymakersweb Views8856
    Read More
  10. STM32(Cortex-M3) 개발환경구축 with PlatformIO

    Date2019.07.26 Category개발환경 Bymakersweb Views6845
    Read More
  11. STM32(Cortex-M3) 개발 - Firmware Flashing

    Date2019.07.23 CategoryMCU Bymakersweb Views6076
    Read More
  12. No Image

    libopencm3 활용, Cortex-M 펌웨어 개발

    Date2019.07.14 CategoryMCU Bymakersweb Views5300
    Read More
  13. No Image

    yocto의 몇가지 중요한 용어 및 개념

    Date2019.06.21 Category개발환경 Bymakersweb Views7425
    Read More
  14. 라즈베리파이3와 PC간 Serial 통신 테스트

    Date2019.05.20 Category개발환경 Bymakersweb Views9452
    Read More
  15. 욕토 프로젝트를 이용한 Qt SDK 빌드 for 라즈베리파이3

    Date2019.03.19 Category운영체제 Bymakersweb Views5740
    Read More
  16. yocto project, 라즈베리파이를 위한 Qt + 임베디드리눅스 빌드

    Date2019.02.01 Category운영체제 Bymakersweb Views14417
    Read More
  17. STM32(Cortex-M3) 개발환경구축 with Eclipse

    Date2018.11.08 Category개발환경 Bymakersweb Views6567
    Read More
  18. No Image

    ST, STM32 MCU용 ‘통합 개발 환경(IDE)’ 무료 제공

    Date2015.03.04 Category개발환경 Bymakersweb Views13006
    Read More
  19. USB OTG 기술의 개념

    Date2014.11.03 Category통신 Bypjk Views19754
    Read More
  20. USB 핀아웃

    Date2014.10.11 Category통신 Bypjk Views11713
    Read More
Board Pagination Prev 1 2 3 Next
/ 3