[STM32] HAL Driver이란?
#EmbeddedHAL Driver을 이용해서 하드웨어를 더욱 쉽게 제어하자!
이전 포스트에서 내장 LED를 점등하기 위해서 아래와 같은 코드를 사용했다.
while(1)
{
*(unsigned int *)0x50000014 |= (1 << 5);
delay();
*(unsigned int *)0x50000014 &= ~(1 << 5);
delay();
}LED랑 연결이 된 GPIO의 레지스터 주소를 직접 건드린 것인데 문제점은 직관적이다.
- 어렵다. (레지스터 주소를 데이터시트에서 직접 찾아야 된다.)
- 위험하다. (주소에 오타가 있으면 다른 주소를 건드리게 된다.)
- 이식성이 떨어진다. (다른 보드로 바뀌면 주소를 다시 수정해야 될 수 있다.)
위와 같은 이유로 실제 현업에서는 STM32 개발을 HAL(Hardware Abstraction Layer)을 이용한다고 한다.
HAL이란?
- 하드웨어를 직접 제어하는 드라이버
- 소프트웨어단에서 하드웨어를 쉽게 제어할 수 있도록 도와주는 인터페이스이다
레지스터 주소를 직접 몰라도 레지스터에 접근을 도와주고 무엇보다 보드가 바뀌어도 주소를 다시 수정하지 않아도 된다.
직접 코드를 보자 보드에 내장된 LED를 제어하려면 A포트의 5번핀에 접근해야 된다.
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
while (1)
{
HAL_Delay(1000);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
}
위 레지스터 주소를 직접 제어하는 코드보다 훨씬 직관적이고 간결하다.
STM32CubeMX를 이용하면 클릭 딸깍으로 더욱 쉽게 GPIO를 초기화(init) 할 수 있다.

HAL을 쓰면 코드가 무거워져 성능이 떨어질 수 있는 단점도 역시 존재하지만
인정하고 기억하자
사람들은 내 코드보다 HAL 코드를 더욱 신뢰할 것이다. 나 역시 그렇고