[NUCLEO-F103RB] GPIO

2024. 11. 13. 18:28·MCU/stm32

0. 개발 환경

IDE: STM32CubeIDE

개발보드: NUCELO-F103RB

 

 

 

1. 내장 LED 회로도

NUCELO 보드의 Schematic

F103RB보드에는 사용자 응용으로 내장해 둔 LED가 있다. 회로에는 LD2이다. 

Schematic을 보면 LD2가 PA5에 연결되어 있는 것을 확인할 수 있다.

Source current라 PA5의 출력이 HIGH가 되어야 LED에 불이 켜질 것이다. 

 

 

 

2. Pin Configuration

PA5를 GPIO_OUTPUT으로 설정한다. 처음 프로젝트 생성할 때, nucleo보드로 생성했더라면 이미 자동으로 설정되어 있을 것이다. 

 

 

 

 

 

그러면 이렇게 코드가 생성된 것을 확인할 수 있다. 기본 세팅들은 이미 전에 했으니 따로 설정할 건 없고 main 함수 안에 잇는 while문에서 작업을 하면 된다.

 

 

 

 

 

HAL 라이브러리에서 GPIO 제어하는 함수를 제공한다.

 

 

 

 

 

      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // LED on
      HAL_Delay(500); // 0.5초 delay
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // LED off
      HAL_Delay(500); // 0.5초 delay

다음과 같이 while문 안에 작성한다. 여기서 주의할 점은 코드를 작성할 때 무조건

      /* USER CODE BEGIN */

      /* USER CODE END */

라는 주석 사이에 작성을 해야 한다. 안 그러면 코드 생성할 때 싹 날아감

 

 

 

 

 

Run을 눌러 업로드를 하면 LD1이 초-빨로 깜빡이면서 업로드가 되고 있는 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

TIP

1. Ctrl + 스페이스 누르면 자동완성 가능함

2. 우측에 Drivers - STM32F1xx_HAL_Driver - Src로 가면 어떤 함수들을 제공하고 있는지 확인할 수 있음

GPIO라이브러리

 

 

 

3. 외부 LED 제어

CN10 커넥터의 PC8을 이용하여 외부 LED를 제어해보자. 그라운드는 32번핀의 AGND를 사용한다.

참고로 CN10 커넥터는

 

 

 

 

 

여기 위치한다.

 

 

 

 

 

다음과 같이 PC8을 OUPUT으로 세팅한 후 코드 생성

 

 

 

 

 

 

    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);  
    HAL_Delay(500);  

다음과 같이 코드 작성 (이번에는 Toggle함수를 사용)

 

 

 

4. 스위치 입력을 통한 LED 제어

1. Schematic

보드에 부착되어 있는 B1스위치(파란색)와 내부 LED(LD2)를 사용한다.

회로도를 보면 B1은 PC13에 pull-up으로 연결되어 있다.

 

 

 

5. Pin Configuration

아마도 PC13이 디폴트로 GPIO_EXTI13로 되어있을 텐데 polling 방식으로 구현할 거라 input모드로 바꿔준다.

 

 

3. Code

      if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET) {
          HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
      }
      else if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET) {
          HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
      }

 

 

 

 

 

예상과 달리 채터링 현상은 일어나지 않았다.. 왜지?

→ RC회로를 달아서 

 

'MCU > stm32' 카테고리의 다른 글

[FreeRTOS] freertos_mpool.h, freertos_os2.h No such file or directory issue  (0) 2025.01.19
ST LINK  (0) 2024.12.27
[NUCELO-F103RB] stm32cubeIDE 프로젝트 생성  (0) 2024.11.12
[NUCLEO-F103RB] 보드 분석 : OSC 32 kHz clock supply (LSE)  (0) 2024.10.02
[NUCLEO-F103RB] 보드 분석 : OSC Clock (HSE)  (1) 2024.10.02
'MCU/stm32' 카테고리의 다른 글
  • [FreeRTOS] freertos_mpool.h, freertos_os2.h No such file or directory issue
  • ST LINK
  • [NUCELO-F103RB] stm32cubeIDE 프로젝트 생성
  • [NUCLEO-F103RB] 보드 분석 : OSC 32 kHz clock supply (LSE)
JaewonAhn
JaewonAhn
  • JaewonAhn
    JwAhn_Embedded
    JaewonAhn
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • MCU (21)
        • esp32 (6)
        • stm32 (15)
      • SW (30)
        • 백준 (27)
        • C, C++ (2)
        • 자료구조 (0)
        • 파이썬 (1)
      • Tool (2)
        • KiCAD (0)
        • Git (0)
        • Visual Studio Code (1)
        • CubeIDE (1)
      • Balancing robot (28)
        • HW (11)
        • FW&SW (2)
        • 일지 (13)
        • 이론공부 (1)
      • 1&2학년 (17)
        • 1학년(2021) (2)
        • 2학년(2022) (4)
        • [2022 03 ~ 09] IoT Project (8)
        • [2022 09 ~ 12] 융합 프로젝트 (3)
      • 2025(학부 3학년) (14)
        • 신호 및 시스템 (1)
        • 전자회로 (0)
        • 제어 및 AI 입문 (3)
        • 임베디드시스템 (8)
        • 기타 (2)
      • 잡솔 (3)
      • 군대 (7)
        • 이등병 (1)
        • 일병 (4)
        • 병장 (2)
      • Driving_Assistance_Device (14)
        • Hailo (7)
        • 일지 (3)
        • 기타 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    10828
    10866
    백준
    headerfile
    스택
    뇌절
    library
    Arduino
    vscode
    합성함수의 미분법
    10799
    WiFi.local() to char
    쇠막대기
    arudino
    이계도함수
    nucelo
    9012
    2학년
    plotly
    10845
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JaewonAhn
[NUCLEO-F103RB] GPIO
상단으로

티스토리툴바