본문 바로가기
Embedded System/STM32

[STM32] GPIO 관련 HAL 함수

by 리미와감자 2025. 9. 7.

GPIO 관련 HAL 함수

STM32에서 GPIO 입력/출력을 제어할 때 주로 쓰이는 함수를 정리한다.

1. 핀 상태 쓰기 (출력)

 
HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
  • 특정 GPIO 핀에 High(1) 또는 Low(0) 값을 출력.
  • PinState: GPIO_PIN_SET / GPIO_PIN_RESET

예시:

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // PA5 핀 HIGH 출력 
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // PA5 핀 LOW 출력

2. 핀 상태 읽기 (입력)

 
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
 
  • 특정 GPIO 핀의 입력 상태(HIGH/LOW)를 읽음.
  • 반환값: GPIO_PIN_SET 또는 GPIO_PIN_RESET

예시:

if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET) { // PC13이 LOW라면 (예: 버튼 눌림) }

3. 핀 상태 토글

 
HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
  • 해당 핀의 출력을 반전시킴 (HIGH ↔ LOW).
  • LED 토글 등에 자주 사용.

예시:

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // PA5 출력 반전

Delay 관련 HAL 함수

STM32에서는 주로 SysTick Timer를 이용해 지연 함수를 제공한다.

1. 밀리초 단위 지연

 
HAL_Delay(uint32_t Delay);
  • 지정한 시간(ms) 만큼 코드 실행을 지연.
  • 내부적으로 SysTick 인터럽트를 활용. 
  • Blocking: HAL_Delay() 호출 동안 메인 루프의 다른 작업은 멈춘다. 실시간성이 필요한 작업과 함께 쓰면 안 됨.
  • 최종적으로 인터럽트에 의존하는 블로킹 함수

예시:

HAL_Delay(1000); // 1초 지연

2. Tick 카운트 읽기

 
uint32_t HAL_GetTick(void);
  • MCU가 실행된 이후 경과한 시간을 ms 단위로 반환.
  • HAL_Delay() 내부도 이 함수를 활용.

예시:

uint32_t start = HAL_GetTick(); while ((HAL_GetTick() - start) < 500) { // 500ms 동안 반복 }
 

댓글