로봇/STM32

STM32 LED 깜빡이기 (NUCLEO-F103RB)

with-RL 2023. 2. 21. 21:42

STM32 입문 프로그램에 해당하는 'LED 깜빡이기' 프로그램을 구현하는 과정에 대한 설명입니다.

아래 과정은 아래 환경과 보드를 이용했습니다.

  • Windows 11 Home
  • STM32CubeIDE-1.11.2
  • STM32 NUCLEO-F103RB 보드

1. 프로젝트 생성하기

  • STM32CubeIDE 프로그램 메뉴에서 'File >> New >> STM32 Project'를 선택합니다.

  • 아래와 같이 실행된 화면에서 다음 순서대로 진행합니다.
    ◦ 'Board Selector' 탭을 선택합니다.
    ◦ 'Commercial Part Number'에 'LUCLEO-F103RB'를 입력합니다.
    ◦ 아래쪽 'Board List'에서 'LUCLEO-F103RB'를 선택합니다.
    'Next' 버튼을 눌러서 다음단계로 이동합니다.

  • 아래와 같이 실행된 화면에서 다음 순서대로 진행합니다.
    'Project Name'을 입력합니다.
    'Finish' 버튼을 눌러서 프로젝트를 생성합니다.
  • 아래 그림과 같이 프로젝트가 생성되고 'Pinout & Configuration' 화면이 실행됩니다.

2. GPIO 핀 설정 및 소스코드 생성하기

  • 'Pinout & Configuration' 화면에서 다음 순서대로 진행합니다.
    좌측 트리에서 'System Core'를 선택합니다.
    트리 하단 항목에서 'GPIO'를 선택합니다.
    ◦ Pin 목록에서 'PA5'를 선택합니다.
    'User Label'을 LED로 변경합니다.

  • 'Ctrl + S'를 누르면 자동으로 코드가 생성되거나 아래와 같이 툴바에서 'Code Generation' 버튼을 눌러서 코드를 생성합니다.

  • 아래 그림과 같이 코드가 생성된 것을 확인할 수 있습니다.
    아래 코드 중 'LED_Pin', 'LED_GPIO_Port'는 이전에 지정한 User Label 값에 따라서 자동으로 생성된 코드입니다.

3. LED 깜빡이는 코드 작성 및 컴파일

  • 프로젝트 > Core > Src > main.c 파일을 열어보면 아래와 같이 코드에 주석이 있는 것을 확인할 수 있습니다.
    주석 중 /* USER CODE BEGIN # */'과 /* USER CODE END # */' 사이에 코드를 작성해야 자동생성으로 코드를 다시 생성하더라도 작성된 코드가 유지됩니다.

  • 지속적으로 LED를 깜빡이기 위해서 while 문 안에 코드를 작성합니다.
    위치는 /* USER CODE BEGIN 3 */ 과 /* USER CODE END 3 */ 사이에 아래 코드를 작성합니다.
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);  // LED On
HAL_Delay(500);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);  // LED Off
HAL_Delay(500);

  • 툴바에서 'Build Debug' 버튼을 눌러서 컴파일 실행합니다.

  • 아래 그림과 같이 컴파일 결과를 확인할 수 있습니다.

4. 다운로드 및 디버깅

  • 컴파일된 프로그램을 STM32 보드에 다운로드하고 실행하는 과정입니다.
  • STM32 보드를 컴퓨터에 연결합니다.
  • 툴바에서 'Debug' 버튼의 아래쪽 화살표를 클릭한 후 'Debug Configuration'을 실행합니다.

  • 아래와 같이 실행된 화면에서 다음 순서대로 진행합니다.
    ◦ 'STM32 C/C++ Application'을 선택합니다.
    ◦ 'New launch configuration'을 선택합니다.

  • 아래와 같은 화면이 실행됩니다.

  • 아래 화면에서 다음 순서대로 진행합니다.
    ◦ 'Debug'을 탭을 선택합니다.
    ◦ 'ST-LINK S/N'을 선택합니다.
    ◦ 'Scan' 버튼을 눌러서 STM32 보드를 찾습니다.
    ◦ 목록에서 적당한 STM32 보드를 선택합니다.
    ◦ 'Apply' 버튼을 눌러서 설정을 적용합니다.
    ◦ 'Debug' 버튼을 눌러서 프로그램 다운로드 및 실행을 시작합니다.

  • 프로그램이 실행된 후 아래와 같이 'main.c' 파일의 'HAL_Init()' 함수에 브레이크 포인트가 잡힐 때까지 기다립니다.
    툴바의 'Resume' 버튼을 눌러서 프로그램을 진행합니다.

  • 아래 그림과 같이 LD2 부분에서 초록색 LED가 깜빡이는 것을 확인할 수 있습니다.
    상단의 LD1 LED는 디버거 상태를 표현하는 LED로 디버거가 동작중일 때 깜빡입니다.

  • 상단 툴바의 'Terminate' 버튼을 누르면 디버거가 종료됩니다.
    이때 디버그 상태를 표현하는 LD1 LED는 깜빡임이 멈추지만 프로그래밍된 LD2 초록색 LED는 지속적으로 깜빡이는 것을 보아 프로그램이 STM32에 잘 설치되어 동작되는 것을 확인할 수 있습니다.