STM32CubeMX 로 프로젝트 생성

By | 2026년 1월 4일
Table of Contents

STM32CubeMX 로 프로젝트 생성

STM32CubeMX는 STM32 마이크로컨트롤러 프로젝트 생성을 도와주는 툴입니다.

1. MCU 또는 보드 선택

file

프로그램을 실행한 후 가장 먼저 사용할 칩이나 개발 보드를 선택할 수 있습니다.

New Project 시작: 메인 화면에서 ‘ACCESS TO MCU SELECTOR’ 또는 ‘ACCESS TO BOARD SELECTOR’를 클릭합니다.

검색 및 선택: Commercial Part Number 칸에 사용 중인 칩 모델명(예: NUCLEO-H563ZI)을 입력하고, 오른쪽 목록에서 해당 칩을 더블 클릭합니다.

TrustedZone 관련 선택 팝업이 표시되면 without TrustedZone 을 선택합니다.
(대부분의 튜토리얼은 Non-Secure 기준으로 작성되어 있습니다.)

2. Pinout & Configuration (주변 장치 및 핀 설정)

칩의 내부 기능(GPIO, UART, ADC 등)을 활성화하는 단계입니다.

file

System Core 설정:

  • 타이틀을 클릭하면 상세 설정이 표시됩니다.
  • ICACHE: 2-ways set associative 을 설정해 줍니다.

3. 클럭 설정 (Clock Configuration)

시스템의 동작 속도를 결정합니다.

상단 Clock Configuration 탭으로 이동합니다.

사용하고자 하는 최대 주파수(HCLK) 값을 입력하고 Enter를 누르면, CubeMX가 자동으로 최적의 경로를 계산해 줍니다.

회로도를 찾아보면 HCLK 창이 보입니다.

file

4. 프로젝트 관리 (Project Manager)

file

코드가 생성될 경로와 개발 환경(IDE)을 지정합니다.

Project Name: 프로젝트 이름을 입력합니다.

Project Location: 파일이 저장될 경로를 선택합니다.

Toolchain / IDE: 본인이 사용하는 개발 환경을 선택합니다. (예: STM32CubeIDE, Keil MDK-ARM, IAR 등)

file

Code Generator 탭: ‘Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral’ 옵션을 체크하면 코드가 기능별로 정리되어 훨씬 보기 편해집니다.
Copy only necessary library files. 를 선택합니다.

5. 코드 생성 (Generate Code)

모든 설정이 끝났다면 오른쪽 상단의 GENERATE CODE 버튼을 클릭합니다. 설정한 내용에 맞춰 초기화 코드가 포함된 프로젝트 파일이 생성됩니다.

file

재설정 가능:
언제든지 .ioc 파일을 다시 열어 설정을 바꾸고 코드를 재생성할 수 있습니다. (단, USER CODE BEGIN과 USER CODE END 사이에 작성한 코드만 유지되니 주의하세요!)

6. NUCLEO-H563ZI 보드로 LED 3개 점멸 코드 작성

NUCLEO-H563ZI 개발보드에는 기본적으로 3개의 사용자 LED가 있습니다. 1초마다 순차적으로 점멸시키는 코드를 작성해보겠습니다.

6-1. 코드 작성

생성된 프로젝트의 main.c 파일을 열고, main() 함수의 무한 루프 부분에 다음 코드를 추가합니다.

/* USER CODE BEGIN WHILE */
while (1)
{
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  // LED1 켜기, 나머지 끄기
  HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_PIN, GPIO_PIN_SET);
  HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_PIN, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_PIN, GPIO_PIN_RESET);
  HAL_Delay(1000);  // 1초 대기

  // LED2 켜기, 나머지 끄기
  HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_PIN, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_PIN, GPIO_PIN_SET);
  HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_PIN, GPIO_PIN_RESET);
  HAL_Delay(1000);  // 1초 대기

  // LED3 켜기, 나머지 끄기
  HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_PIN, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_PIN, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_PIN, GPIO_PIN_SET);
  HAL_Delay(1000);  // 1초 대기

}
/* USER CODE END 3 */

6-2. 빌드 및 업로드

프로젝트를 빌드하고(Ctrl+B 또는 Build 버튼) 보드에 업로드합니다(Run 버튼 또는 F11). 3개의 LED가 1초 간격으로 순차적으로 점멸하는 것을 확인할 수 있습니다.

코드 설명

HAL_GPIO_WritePin(): GPIO 핀의 상태를 제어하는 HAL 라이브러리 함수입니다. GPIO_PIN_SET은 핀을 High(LED 켜짐)로, GPIO_PIN_RESET은 Low(LED 꺼짐)로 설정합니다.
HAL_Delay(1000): 밀리초 단위로 대기하는 함수입니다. 1000ms = 1초입니다.
USER CODE BEGIN과 USER CODE END 사이에 코드를 작성하면, CubeMX에서 코드를 재생성해도 작성한 코드가 유지됩니다.

재설정 가능: 언제든지 .ioc 파일을 다시 열어 설정을 바꾸고 코드를 재생성할 수 있습니다. (단, USER CODE BEGIN과 USER CODE END 사이에 작성한 코드만 유지되니 주의하세요!)

답글 남기기