Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 아두이노 문법
- Arduino
- 3d
- ENDER-3
- 엔더3
- 필라멘트
- 임베디드개발
- STM32
- 아두이노 소프트웨어
- reference
- 3D 프린트
- 아두이노 레퍼런스
- printer
- ender3
- 아두이노 IDE
- 3d printer
- 아두이노 구조
- Arduino IDE
- 아두이노
- Arduino Reference
- 3D프린터
- 프린트
- nucleo-f446re
- PLA
- 3D 프린터
- 엔더
- 3D프린트
- STM32CubeIDE
- 3d print
Archives
- Today
- Total
키위백과의 잡동사니
HAL vs LL - 무엇이 다를까? 본문
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를 토글하는 방법을 다룰 예정입니다.
'프로젝트 > 밸런싱 로봇' 카테고리의 다른 글
STM32CubeIDE 예제: TIM2을 이용한 PWM으로 LD2 LED 깜빡이기 (0) | 2025.07.21 |
---|---|
PWM이란? (0) | 2025.07.20 |
STM32CubeIDE 예제: 외부 인터럽트(External Interrupt) (0) | 2025.07.19 |
인터럽트(Interrupt)란? - 사고가 났을 때 에어백이 펴지는 이유 (0) | 2025.07.19 |
STM32CubeIDE: ST-LINK 업그레이드 방법 (0) | 2025.07.17 |
Comments