프로젝트/밸런싱 로봇

HAL vs LL - 무엇이 다를까?

KiwiPedia 2025. 7. 22. 18:10

STM32 마이크로컨트롤러를 처음 다루다 보면 HAL과 LL이라는 용어를 자주 마주치게 됩니다.

두 방식은 MCU 주변장치를 제어하는 대표적인 라이브러리 구조인데, 각각의 목적과 특성에 따라 장단점이 분명합니다.

이 글에서는 HAL과 LL의 차이를 예제와 비교를 통해 쉽게 설명해보겠습니다.

 

1. HAL (Hardware Abstraction Layer)란?

HAL은 STM32CubeMX 및 STM32CubeIDE에서 자동으로 생성되는 고수준의 API입니다. 이름 그대로 하드웨어를 "추상화"하여 복잡한 레지스터 접근 없이도 함수 호출만으로 주변장치를 쉽게 제어할 수 있도록 도와줍니다.

 □ HAL의 장점

  • 쉬운 사용법: 대부분 함수 하나로 설정 및 제어 가능
  • 자동 코드 생성: CubeMX에서 설정하면 자동 생성됨
  • 높은 이식성: STM32 계열 간 코드 재사용이 쉬움
  • 초보자/교육용 적합

 □ HAL의 단점

  • 성능 손실: 내부 함수 호출이 많아 오버헤드 존재
  • 코드 크기 큼
 

2. LL (Low Layer)란?

LL은 HAL보다 더 하드웨어에 가까운 수준의 라이브러리로, 레지스터를 직접 제어하는 방식에 가깝습니다. 성능이 중요한 분야에 자주 사용됩니다.

 □ LL의 장점

  • 빠른 실행 속도: 오버헤드 거의 없음
  • 작은 코드 사이즈
  • 정밀한 제어 가능: 레지스터 수준의 접근 가능

 □ LL의 단점

  • 이해 난이도 높음: 레지스터 구조에 대한 이해 필요
  • 이식성 낮음: MCU 라인에 따라 코드 변경 필요

 

3. 비교 요약표

항목 HAL LL
추상화 수준 높음 낮음
성능 (속도) 낮음 (오버헤드 있음) 높음 (빠름)
구현 난이도 쉬움 어려움
코드 크기 작음
포팅/이식성 우수 제한적
주요 사용처 학습, 일반 제어 고속/실시간 처리

 

 

4. 예제 비교

LED 토글 (HAL)

HAL_GPIO_TogglePin(GPIOx, GPIO_Pin);

LED 토글 (LL)

LL_GPIO_TogglePin(GPIOx, PinMask);

HAL은 함수 이름만 봐도 동작이 명확하며, 사용하기 쉬운 반면, LL은 STM32 내부 레지스터 및 구조에 대한 이해가 요구됩니다.

 

5. 언제 HAL을, 언제 LL을 쓸까?

상황 추천 방식
STM32 입문/교육용 프로젝트 HAL
다양한 MCU 라인 호환 고려 HAL
정밀 제어가 필요할 때 LL
속도/응답시간이 중요한 실시간 제어 LL
코드 사이즈를 최소화하고 싶을 때 LL

실제 프로젝트에서는 HAL을 기본으로 사용하고, 속도나 타이밍이 중요한 일부만 LL로 보완하는 혼용 방식도 많이 사용됩니다.

 

6. 결론

HAL은 빠르게 프로젝트를 시작하고 유지보수를 쉽게 하기 위한 추상화된 API이며, LL은 성능과 정밀 제어를 위한 저수준 라이브러리입니다.

둘 중 무엇이 더 좋다기보다는, 상황에 따라 어떤 방식이 적합한가를 판단해 사용하는 것이 중요합니다.

다음 글에서는 실제로 LL 드라이버를 사용해 LED를 토글하는 방법을 다룰 예정입니다.