[STM32] HAL Driver이란?

#Embedded

HAL Driver을 이용해서 하드웨어를 더욱 쉽게 제어하자!


이전 포스트에서 내장 LED를 점등하기 위해서 아래와 같은 코드를 사용했다.

while(1)
{
    *(unsigned int *)0x50000014 |=  (1 << 5);
    delay();
    *(unsigned int *)0x50000014 &= ~(1 << 5);
    delay();
}

LED랑 연결이 된 GPIO레지스터 주소를 직접 건드린 것인데 문제점은 직관적이다.

  1. 어렵다. (레지스터 주소를 데이터시트에서 직접 찾아야 된다.)
  2. 위험하다. (주소에 오타가 있으면 다른 주소를 건드리게 된다.)
  3. 이식성이 떨어진다. (다른 보드로 바뀌면 주소를 다시 수정해야 될 수 있다.)

위와 같은 이유로 실제 현업에서는 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) 할 수 있다.

cubemx_gpio_init

HAL을 쓰면 코드가 무거워져 성능이 떨어질 수 있는 단점도 역시 존재하지만

인정하고 기억하자

사람들은 내 코드보다 HAL 코드를 더욱 신뢰할 것이다. 나 역시 그렇고