본문 바로가기

임베디드 & 로보틱스/STM32

[STM32-기초] HAL GPIO, 내장 스위치로 LED ON/OFF

준비물

- CubeIDE가 설치된 PC

- 개발 보드 : Nucleo-F746ZG

- micro 5 pin 케이블

 

목표

Nucleo-F746ZG 개발보드에 내장된 푸쉬 스위치(B1)로 내장 LED(LD1) ON/OFF

 

선수지식

2025.08.26 - [임베디드 & 로보틱스/STM32] - [STM32-기초] HAL GPIO로 내장 LED 500ms 점멸

 

참고자료

https://www.st.com/resource/en/user_manual/um1974-stm32-nucleo144-boards-mb1137-stmicroelectronics.pdf

MB1137.pdf
3.20MB


HAL Driver를 사용하여 B1 USER 스위치가 눌릴 때마다 LD1 ON/OFF 하기

1. CubeIDE 새 프로젝트 만들기

  1. File → New → STM32 Project
  2. MCU/MPU Selector 탭 → Commercial Part Number에서 746ZGT6 검색 → 선택 → Next
  3. 프로젝트 이름 입력 gpio_led_on_offFinish
  4. 팝업창에서 "Do you want to apply now such default configuration?" 이라고 물으면 yes

2. LD1(LED)와 B1(스위치) 연결된 GPIO pin 확인

LD1B1이 연결된 GPIO 핀은 위에 첨부한 참고자료(UM1974)에서 확인할 수 있습니다.

 

LD1PB0에 연결되어있고, B1PC13에 연결되어있음을 알 수 있습니다.

 

B1 의 회로를 분석해보면, C52 는 현재 보드에 실장 되어있지 않기 때문에, C52R60 은 없다고 생각하고 분석한다면

R58 이 풀다운 저항 역할을 하고, B1 스위치가 눌리면(ON) VDD 의 전압이 PC13 에 들어가서 PC13pin의 값이 HIGH가 될 것임을 예상할 수 있습니다. 


3. Pinout & Configuration 확인/수정

 

  1. Pinout view에서 하단의 돋보기란에 PB0 입력
  2. Pinout & Configuration 창에서 PB0가 반짝이고 있음
  3. PB0 클릭 → GPIO_Output 클릭 → 핀이 초록색으로 변함(할당 됨)
  4. PB0 우클릭 → Enter User Label 클릭 → LD1 입력 → 엔터
  5. 돋보기 란에서 PC13 입력
  6. PC13이 반짝이고 있음
  7. PC13 클릭 → GPIO_Input 클릭 → 핀이 초록색으로 변함
  8. PC13 우클릭 → Enter User Label 클릭 → B1 입력 → 엔터
  9. CategoriesSystem CoreGPIO
  10. 아래와 같이 설정 되어있는지 확인

 


4. 코드 생성

  1. 상단 Project → Generate Code(노란색 톱니바퀴 아이콘)
  2. 이제 아래와 같이 코드를 작성합니다.
/* USER CODE BEGIN PV */
int b1_state = 0;
/* USER CODE END PV */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  b1_state = HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);
	  if (b1_state == 0)
	  {
		  HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_RESET);
	  }
	  else
	  {
		  HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_SET);
	  }
    /* USER CODE END WHILE */
Tip!
ctrl + space 를 누르면 아래 이미지와 같이 자동완성 기능을 사용할 수 있습니다.

5. 동작 성공

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.