그라운드 임베디드 유튜브 구독

노트 / MCU 펌웨어

레지스터 제어와 HAL: 언제 무엇을 쓸까

레지스터를 직접 쓰면 빠르고 정확하고, HAL을 쓰면 빠르게 개발합니다. 둘을 섞어 쓰는 현업 방식.

GROUND EMBEDDED · 정리 노트펌웨어 02레지스터 제어와 HAL 1// HAL 2HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GP… 3// 레지스터 4GPIOA->BSRR = GPIO_BSRR_BS5;

같은 일, 두 가지 방법

// HAL
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
// 레지스터
GPIOA->BSRR = GPIO_BSRR_BS5;

비교

HAL 레지스터 (LL 포함)
개발 속도 빠름 느림
실행 속도 함수 호출과 검사로 느림 빠름
코드 크기 큼 작음
칩 간 이식 쉬움 칩마다 다름
이해도 내부가 가려짐 하드웨어가 그대로 보임

현업 방식

  • 초기화(클럭, 핀, 주변장치 설정)는 CubeMX가 만든 HAL 코드를 씁니다.
  • 10kHz 이상으로 도는 제어 루프, 인터럽트 안의 레지스터 접근은 레지스터나 LL(Low Layer) 드라이버로 씁니다.
  • HAL 함수가 이상하게 동작하면 소스를 열어 어떤 레지스터를 건드리는지 확인합니다. 결국 레퍼런스 매뉴얼을 읽을 줄 알아야 HAL도 제대로 씁니다.

HAL은 하드웨어를 몰라도 되게 해 주는 도구가 아니라 아는 사람이 빨리 일하게 해 주는 도구입니다.