레지스터 제어와 HAL: 언제 무엇을 쓸까
레지스터를 직접 쓰면 빠르고 정확하고, HAL을 쓰면 빠르게 개발합니다. 둘을 섞어 쓰는 현업 방식.
같은 일, 두 가지 방법
// 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은 하드웨어를 몰라도 되게 해 주는 도구가 아니라 아는 사람이 빨리 일하게 해 주는 도구입니다.