로봇/STM32

STM32 Button을 이용해서 LED 깜빡이기

with-RL 2023. 2. 22. 19:21

STM32 LED 깜빡이기 (NUCLEO-F103RB) 다음으로 버튼을 누르면 LED에 불이 들어오고 버튼을 누르지 않으면 LED에 불이 꺼지는 프로그램을 구현하는 과정에 대한 설명입니다.

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

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

1. 프로젝트 생성하기

 

  • STM32 LED 깜빡이기 (NUCLEO-F103RB)의 '1. 프로젝트 생성하기'와 동일한 방법으로 STM32 프로젝트를 생성합니다.
    단, 프로젝트 이름만 기존과 다르게 입력합니다.

  •  아래그림과 같이 프로젝트가 생성됩니다.

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

  • 'Pinout view' 화면에서 다음 순서대로 진행합니다.
    ◦ 좌측 상단의 'B1 [Blue PushButton]' 부분을 선택 후 마우스 메뉴 버튼을 클릭합니다.
    ◦ 실행되는 팝업메뉴에서 'GPIO Input'을 선택합니다.

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

  • Pinout & Configuration' 화면에서 다음 순서대로 진행합니다.
    ◦ Pin 목록에서 'PC13-TA'를 선택합니다.
     'User Label'을 BTN으로 변경합니다.

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

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

3. 코드 작성 및 컴파일

  • while 문 안에 아래와 같이 코드를 작성합니다.
    위치는 /* USER CODE BEGIN 3 */ 과 /* USER CODE END 3 */ 사이에 아래 코드를 작성합니다.
if (HAL_GPIO_ReadPin(BTN_GPIO_Port, BTN_Pin) == GPIO_PIN_RESET) {  // If Button Pressed
  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);  // LED On
} else {
  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);  // LED Off
}

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

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

4. 다운로드 및 디버깅

  • 아래 그림과 같이 버튼을 누르면 LED가 꺼지고 버튼을 누르지 않으면 LED가 꺼지는 것을 확인할 수 있습니다.