HAL 라이브러리 구성

2019. 6. 25. 21:51임베디드/32F429IDISCOVERY

 

 

소스파일은 단순히 cubeMX에서 PG13(Green LED)을 Output으로 TrueSTUDIO로 Generate한 코드다. TrueSTUDIO의 첫화면은 다음과 같다. HAL 라이브러리를 사용하면서, main.c에서는 단순히 main.h 헤더를 불러오게 된다 (헤더파일 혹은 소스코드 진입은 F3 키를 누르면 된다. 트리를 한 번에 보고 싶으면 Ctrl + G를 누르면 된다). 위의 트리 그림을 한 번 추적해봐서 어떠한 내용이 있는지 확인하려고 한다

 

 

이제 main.h 부터 하나씩 소스코드 트리가 어떻게 되는지 확인하려고 한다. main.h에는 큰 내용은 없고 단순한 main.c의 헤더를 위한 파일이면서 "stm32f4xx_hal.h"를 불러오고 있다

 

 

stm32f4xx_hal.h에서는 "stm32f4xx_hal_conf.h"를 불러오면서, 주변기능을 제어하는 HAL 함수가 정의되어 있다. 주요 함수로 HAL_Delay를 볼 수 있다

 

 

stm32f4xx_hal_conf.h에서는 주변장치를 선택하는 헤더파일이 모아져있다. 먼저 사용할 모듈들에 대해서는 HAL_XXX_MODULE_ENABLED라고 정의되어 있다. 그리고 밑에 내려가면 사용할 모듈들에 대해서 각각의 헤더파일을 불러오고 있다. 

 

 

하나의 예로 "stm32f4xx_hal_gpio.h"에 들어가면 "stm32f4xx_hal_def.h" 헤더파일을 불러오면서 gpio에서 사용되는 정의와 함수가 정의되어 있다. 예를 들어 GPIO_PIN_XX, HAL_GPIO_WritePin과 같은 것이 담겨 있다

 

 

stm32f4xx_hal_def.h에서는 "stm32f4xx.h"를 불러오면서 HAL에서 사용되는 정의어를 define 해놓은 헤더파일이다

 

 

stm32f4xx.h에는 F4 시리즈 중 사용하고자 하는 컨트롤러를 선택하기 위한 헤더파일이다. 우리가 사용하는 MCU는 "stm32f429xx.h"로 빌드 옵션에서 심볼로 정의되어서 컴파일 된다

 

 

stm32f429xx.h에는 429칩에 대한 메모리 맵을 정의해놓았다. 주변장치의 시작주소와 구조체가 정의되어 있어, 레지스터 방식으로 코드를 작성한다면 429xx.h의 정의를 주로 사용하게 된다. 그리고 "core_cm4.h"과 "system_stm32f4xx.h"를 헤더파일로 불러오게 된다

 

 

core_cm4.h는 ARM사에서 제공하는 Cortex-M4 CMSIS 파일이다. 간략하게 core의 레지스터를 더불어 NVIC, SCB, SysTick, Debug, MPU, FPU 등을 정의하고 있다

 

 

system_stm32f4xx.h에는 클럭 설정과 관련한 헤더파일로 버스들의 클럭값을 확인할 수 있다