4장 - GPIO

조재훈·2023년 6월 8일
0

GPIO

  • General Purpose Input Output

STM32 펌웨어 구성

1) 어플리케이션 레벨의 데모 프로그램 (Application level demonstrations)
: ST사에서 제공하는 각종 Evaluation 보드, Discovery 보드, NUCLEO 보드 등을 이용한 다양한 데모 프로그램 포함

2) STM32 미들웨어 레벨 (Middleware level)
: TCP/IP, USB, Touch Library, Graphics, FAT file system, RTOS를 지원
: OS의 사용, 파일 관리, 인터넷 접속, USB 사용 등이 구현됨

3) STM32 유틸리티 (Utility)
: ARM사의 CMSIS 지원을 위한 소스 코드와 ST사에서 제공하는 CPU, Font, Log, Media 등의 유틸리티

4) STM32 HAL(Hardware Abstraction Layer) 레벨
: 지원하는 MCU의 하드웨어 구동을 위한 소프트웨어
: BSP(Board Support Package)와 HAL(Hardware Abstraction Layer)이 있음
: 해당 레지스터에 직접 값을 써넣거나 주변 장치를 제어하는 등의 동작이 이 루어짐

5) 하드웨어 (Hardware)
: 펌웨어가 아님
: 펌웨어가 구동되는 실제 하드웨어(MCU)를 나타냄

HAL 드라이브

  • HAL : Hardware Abstraction Layer
  • MCU의 주변 장치를 제어하는 등의 동작이 이루어짐
  • 이를 위해 HAL 레벨에 여러 개의 파일이 존재 => HAL 드라이버
  • 여러 주변 장치 설정을 위한 데이터 구조체와 주변 장치의 구동을 위한 API 함수 포함된 여러 파일로 구성

GPIO

  • GPIO : General Purpose Input Output
    1) 구조

2) 입력모드

  • 플로팅(Floating) 방식 입력
  • 풀업(Pull-up) 방식 입력
  • 풀다운(Pull-down) 방식 입력
  • 아날로그 입력

3) 출력모드

  • 오픈 드레인(Open drain) 방식 출력
  • 푸시-풀(Push-pull) 방식 출력

4) 대체 기능

  • Alternate Function

5) 외부 인터럽트/이벤트 입력(External interrupt/event lines)

GPIO 설정용 구조체

1) GPIO_InitTypeDef

  • GPIO의 초기 설정을 위한 구조체
  • stm2f1xx_hal_gpio.h에 정의

2) 데이터 형

  • uint32_t Pin
  • uint32_t Mode
  • uint32_t Pull
  • uint32_t Speed

3) 데이터 형의 설명

  • Pin : 설정할 핀을 지정
  • 이 파라미터가 가질 수 있는 값은 다음과 같음
    GPIO_PIN_0 GPIO_PIN_1 GPIO_PIN_2 GPIO_PIN_3 GPIO_PIN_4 GPIO_PIN_5 GPIO_PIN_6 GPIO_PIN_7 GPIO_PIN_8 GPIO_PIN_9 GPIO_PIN_10 GPIO_PIN_11 GPIO_PIN_12 GPIO_PIN_13 GPIO_PIN_14 GPIO_PIN_15 GPIO_PIN_All

GPIO Mode

  • 핀의 동작 모드 설정
  • 이 파라미터가 가질 수 있는 값은 다음과 같음
  • GPIO_MODE_INPUT : 입력 플로팅(Input Floating) 모드
  • GPIO_MODE_OUTPUT_PP : 출력 푸쉬 풀(Output Push Pull) 모드
  • GPIO_MODE_OUTPUT_OD : 출력 오픈 드레인(Output Open Drain) 모드
  • GPIO_MODE_AF_PP : 대체 기능 푸쉬 풀(Alternate Function Push Pull) 모드
  • GPIO_MODE_AF_OD : 대체 기능 오픈 드레인(Alternate Function Open Drain) 모드
  • GPIO_MODE_AF_INPUT : 대체 기능 입력(Alternate Function Input) 모드
  • GPIO_MODE_ANALOG : 아날로그(Analog) 모드
  • GPIO_MODE_IT_RISING : 외부 인터럽트(External Interrupt) 모드. 상승 엣지(Rising Edge)에 트리거(trigger)됨
  • GPIO_MODE_IT_FALLING : 외부 인터럽트(External Interrupt) 모드. 하강 엣지(Falling Edge)에 트리거(trigger)됨
  • GPIO_MODE_IT_RISING_FALLING : 외부 인터럽트(External Interrupt) 모드. 상승/하강 엣지(Rising/Falling Edge)에 트리거(trigger)됨
  • GPIO_MODE_EVT_RISING External : 이벤트(Event)모드. 상승 엣지(Rising Edge)에 트리거(trigger)됨
  • GPIO_MODE_EVT_FALLING External : 이벤트(Event)모드. 하강 엣지(Falling Edge)에 트리거(trigger)됨
  • GPIO_MODE_EVT_RISING_FALLING : 이벤트(Event)모드. 상승/하강 엣지(Rising/Falling Edge)에 트리거(trigger)됨

Pull

  • 핀의 Pull-upm Pull-Down 모드 설정
  • 이 파라미터가 가질 수 있는 값은 다음과 같음
    GPIO_NOPULL : No Pull-up or Pull-down activation
    GPIO_PULLUP : Pull-up activation
    GPIO_PULLDOWN : Pull-down activation

Speed

  • 핀의 동작속도 설정
  • 이 파라미터가 가질 수 있는 값은 다음과 같음
    GPIO_SPEED_FREQ_LOW : Low Speed
    GPIO_SPEED_FREQ_MEDIUM : Medium Speed
    GPIO_SPEED_FREQ_HIGH : High Speed

GPIO 구동용 함수

  • HAL_GPIO_ReadPin()
    : GPIO의 지정된 핀의 값을 이 ㄺ어온다
  • HAL_GPIO_WritePin()
    : GPIO의 지정된 핀을 0, 또는 1로 설정
  • HAL_GPIO_TogglePin()
    : GPIO의 지정된 핀의 값을 토글(toggle)시킴
  • HAL_GPIO_LockPin()
    : GPIO의 지정된 핀의 설정값을 변경 금지(lock)시킴

인터럽트 처리용 함수

  • GPIO에서 발생하는 외부 인터럽트(EXTI)의 처리를 위한 함수
  • HAL_GPIO_EXTI_IRQHandler()
    : EXTI 인터럽트의 핸들러 함수
  • HAL_GPIO_EXTI_Callback()
    : EXTI 인터럽트를 처리하기 위한 콜백함수
    : EXTI 핸들러 함수(EXTIx_IRQHandler()) 내에서 사용됨

GPIO 관련 함수

1) HAL_GPIO_Init(GPIO_TypeDef * GPIOx, GPIO_InitTypeDef * GPIO_Init)

  • 함수설명
    : GPIOx를 GPIO_Init 구조체 변수의 설정값에 맞추어 초기화
  • 파라미터
    : GPIOx : GPIO의 이름(x는 A~K까지의 값을 가질 수 있다)
    : GPIO_Init : GPIO의 설정값을 가지고 있는 GPIO_InitTypeDef 구조체형의 변수
  • 리턴값
    : 없음

2) HAL_GPIO_DeInit(GPIO_TypeDef * GPIOx, uint32_t GPIO_Pin)

  • 함수 설명
    : GPIOx를 리셋 시의 디폴트 값으로 설정(초기화 하제)
  • 파라미터
    : GPIOx : GPIO의 이름(x는 A~K까지의 값을 가질 수 있음)
    : GPIO_Pin : GPIO Pin을 지정. GPIO_PIN_0 ~ GPIO_PIN_15 사이의 값을 가질 수 있음
  • 리턴값
    : 없음

3) HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)

  • 함수 설명
    : GPIOx의 지정된 핀(GPIO_Pin)에 입력된 값을 읽어옴
  • 파라미터
    : GPIOx : GPIO의 이름(x는 A~K까지의 값을 가질 수 있음)
    : GPIO_Pin : GPIO Pin을 지정. GPIO_PIN_0 ~ GPIO_PIN_15 사이의 값을 가질 수 있음
  • 리턴값
    : 지정된 핀의 입력값

4) HAL_GPIO_WritePin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

  • 함수 설명
    : GPIOx의 지정된 핀(GPIO_Pin)을 0, 또는 1로 설정

  • 파라미터
    : GPIOx : GPIO의 이름(x는 A~K까지의 값을 가질 수 있음)
    : GPIO_Pin : GPIO Pin을 지정. GPIO_PIN_0 ~ GPIO_PIN_15 사이의 값을 가질 수 있음
    : PinState : 핀의 상태를 설정. 이 파라미터가 가질 수 있는 값음 다음과 같음

    • GPIO_PIN_RESET : 핀을 리셋(0) 한다
    • GPIO_PIN_SET : 핀을 셋(1) 한다
  • 리턴값
    : 없음

    5) HAL_GPIO_TogglePin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)

  • 함수 설명
    : GPIOx의 지정된 핀(GPIO_Pin)의 값을 토글(toggle)시킴

  • 파라미터
    : GPIOx : GPIO의 이름(x는 A~K까지의 값을 가질 수 있음)
    : GPIO_Pin : GPIO Pin을 지정. GPIO_PIN_0 ~ GPIO_PIN_15사이의 값을 가질 수 있음

  • 리턴값
    : 없음

6) HAL_GPIO_LockPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)

  • 함수 설명
    : GPIOx의 지정된 핀(GPIO_Pin)의 값을 록(Lock)시킴
  • 파라미터
    : GPIOx : GPIO의 이름(x는 A~K까지의 값을 가질 수 있음)
    : GPIO_Pin : GPIO_Pin을 지정. GPIO_PIN_0 ~ GPIO_PIN_15 사이의 값을 가질 수 있음
  • 리턴값
    : 없음
  • 참고
    : 핀이 록(Lock)되면 리셋되기 전까지는 그 핀의 값을 변경할 수 없음

7) HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

  • 함수 설명
    : GPIO에서 발생하는 EXTI 인터럽트 처리를 위한 콜백함수
    : 예제에서 이 함수는 stm32f10x_it.c 파일 내의 인터럽트 핸들러 함수(EXTIx_IRQHandler())에서 호출되어 사용
  • 파라미터
    : GPIO_Pin : GPIO Pin을 지정. GPIO_PIN_0 ~ GPIO_PIN_15 사이의 값을 가질 수 있음
  • 리턴값
    : 없음

8) HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

  • 함수 설명
    : EXTI 인터럽트를 처리하기 위한 콜백 함수
    : 에제에서 이 함수는 main.c 파닐 내에서 구현되어 사용
  • 파라미터
    : GPIO_Pin : GPIO Pin을 지정. GPIO_PIN_0 ~ GPIO_PIN_15 사이의 값을 가질 수 있음
  • 리턴값
    : 없음
profile
맨땅에 헤딩. 인생은 실전.

0개의 댓글