[STM32 CubeMx] Project Manager 항목 및 설정
STM32CubeMX 프로젝트 설정 기록 및 설명
STM32CubeMX는 STM32 마이크로컨트롤러의 초기 설정을 GUI 기반으로 쉽게 구성하고 자동으로 코드까지 생성해주는 도구입니다. 아래는 개인적으로 구성한 프로젝트 설정 예시와 각 항목에 대한 설명입니다.
1. Project 설정 탭
1) Project Name : 프로젝트 식별용 이름으로, 생성된 코드 폴더 및 파일에 자동 반영됨.
2) Project Location : 생성된 프로젝트가 저장될 폴더 위치.
3) Application Structure :
- Advanced 모드를 선택하면 사용자 주석 영역 관리, 다중 파일 구조 지원.
- Do not generate the main() 체크하면 main.c 파일을 생성하지 않음 (RTOS 기반 사용자에게 유용).
4) Toolchain Folder Location : IDE가 참조할 프로젝트 설정 파일 저장 경로.
5) Toolchain / IDE : 사용 중인 IDE 선택 (MDK-ARM, STM32CubeIDE, IAR 등).
6) Min Version: IDE의 최소 버전 요구사항 지정 가능.
7) Linker Settings (링커 설정)
Minimum Heap Size :
-동적 메모리 할당(예: malloc(), new)에 사용할 최소 힙 크기를 지정, 설정값: 0x200 (512 bytes)
-STM32에서는 기본적으로 작은 힙이 설정되므로, FreeRTOS나 동적 구조체 등을 사용할 경우 이 값을 늘려야 오류를 방지
Minimum Stack Size :
-main 함수에서 사용하는 기본 스택 크기를 설정, 설정값: 0x400 (1024 bytes)
-인터럽트 처리, 함수 호출 중첩 등이 많은 경우 Stack Overflow 방지를 위해 여유 있게 설정
8) Thread-safe Settings (스레드 안전 설정) : RTOS(예: FreeRTOS)를 사용하는 경우, stdio, malloc 같은 라이브러리 함수가 멀티스레드 환경에서도 안전하게 동작하도록 lock 처리, (Enable multi-threaded support 기본값: 비활성화 상태)
체크 시 필요 조건: 실제로 FreeRTOS 같은 RTOS가 프로젝트에 포함되어야 의미가 있음.
-Thread-safe Locking Strategy 설정값:
Default – Mapping suitable strategy depending on RTOS selection 의미: 선택한 RTOS에 따라 적절한 락 전략을 자동으로 설정합니다. 예를 들어 FreeRTOS를 사용할 경우, 해당 RTOS에 맞는 뮤텍스 또는 스핀락이 내부적으로 연결됩니다.
- RTOS 없이 단순 bare-metal 환경에서는 위의 멀티스레드 지원 옵션은 끄는 것이 일반적입니다.
- RTOS를 사용하면서 printf(), malloc() 등을 여러 Task에서 동시에 사용하면, 이 옵션을 활성화해야 충돌이나 예상치 못한 동작을 방지할 수 있습니다.
2. Code Generator 설정
1) 라이브러리 포함 방식
- Copy all used libraries into the project folder: 전체 라이브러리를 프로젝트에 복사.
- Copy only the necessary library files: 필요한 최소 라이브러리만 복사.
- Add as reference: 파일을 복사하지 않고 참조만 설정.
2) 코드 생성 파일 옵션
√ Generate peripheral initialization as a pair of .c/.h: 각 주변장치별 .c/.h 파일 생성.
√ Backup previously generated files: 기존 파일 백업.
√ Keep User Code: 사용자 작성 코드 보존 (/* USER CODE BEGIN */).
√ Delete previously generated files: 더 이상 사용하지 않는 생성 파일 자동 삭제.
3) HAL Settings
√ Set all free pins as analog: 미사용 핀을 아날로그 입력으로 설정.
- 플로팅 상태로 두면 노이즈로 인해 불필요한 전류 소모 발생 가능성, 전력 절감 목적.
- 아날로그 모드로 설정하면 해당 핀의 디지털 입력 회로가 꺼지고 전류 소모가 거의 0에 가까워집니다.
- 저전력 설계가 중요한 배터리 기반 IoT 제품, 웨어러블 기기 등에선 필수 설정.
- 만약 나중에 핀을 새롭게 사용할 계획이라면, 이 설정으로 인해 초기화되지 않은 핀에서 예기치 않게 아날로그 상태로 설정될 수 있으므로 주의해야 함.
√ Enable Full Assert: assert 디버깅 기능 활성화 (개발 중 오류 탐지에 유용).
-HAL 드라이버 내부의 assert_param()을 활성화하여 잘못된 파라미터나 사용 오류를 잡아줌 STM32Cube HAL은 내부적으로assert_param() 매크로를 통해 인자 검사를 수행합니다.
-이 옵션을 활성화하면 assert_failed() 함수가 동작하며, 코드의 어느 위치에서 오류가 났는지 알려줍니다.
-디버깅에는 매우 유용하지만, 릴리즈 빌드에서는 성능과 코드 크기 최적화를 위해 비활성화하는 것이 일반적입니다.
4) Template Settings
사용자 템플릿 설정 버튼. 코드 생성 구조를 커스터마이징 가능.
Code Generator 설정
3. Advanced Settings Linker Settings
1) Generated Function Calls (자동 초기화 함수 설정) : STM32CubeMX는 main.c 내부에서 MX_XXX_Init() 형식의 함수들을 자동으로 호출합니다. 이 영역에서는 어떤 초기화 함수를 호출할지 순서와 함께 제어할 수 있습니다.
항목 설명
- Generate Code 체크하면 해당 초기화 함수(MX_XXX_Init)가 생성됩니다.
- Rank 실행 순서를 의미하며, 1부터 순차적으로 실행됨.
- Function Name 생성될 함수 이름 (예: MX_USART1_UART_Init()) Peripheral Instance Name 사용된 주변장치 인스턴스 이름 (예: USART1, TIM3) 'Do Not Generate Function Call' 체크 시 해당 초기화 함수는 코드에 포함되지만 호출되지 않음.
2) Register Callback
STM32 HAL 라이브러리는 인터럽트 발생 시 호출되는 콜백 함수를 기본으로 제공합니다. 이 항목에서는 각 드라이버에 대해 사용자 정의 콜백을 Enable/Disable 할 수 있습니다.
항목 설명
- ADC / CAN / TIM 등 주변장치 콜백 지원 여부 설정 가능
- DISABLE 기본 HAL 콜백만 사용됨 (HAL_X_IRQHandler 내부에서 처리) ENABLE HAL_XXX_RegisterCallback() 사용 가능 → 사용자 정의 핸들러 등록 가능
댓글