VSCode 기반 STM32G431 LCD 프로젝트 구성 및 초기화

프로젝트 초기 설정

안정적인 개발 환경을 위해 STM32CubeMX 최신 버전(6.10 이상)과 Keil MDK 5.33 이상을 사용하는 것이 권장된다. 이 조합은 HAL 라이브러리와의 호환성을 극대화하며, AC6 컴파일러를 통한 최적화된 빌드 성능을 제공한다.

1. CubeMX를 이용한 초기 코드 생성

CubeMX를 실행하고 칩 검색창에 G431RBT6을 입력하여 STM32G431RBT6을 선택한다. 프로젝트 설정 시, IDE 도구는 MDK-ARM을 선택하고 최소 버전을 5.32로 지정한다.

시스템 클록 구성에서 외부 크리스탈(HSE)을 활성화하고, PLL을 활용해 HCLK를 80MHz로 설정한다. 내부 RC 오실레이터 대비 높은 정밀도를 제공하므로 타이밍 민감한 애플리케이션에 적합하다.

코드 생성 옵션에서는 "각 외부 장치마다 별도의 .c/.h 파일 생성"을 선택하여 유지보수성을 향상시킨다.

2. BSP 계층 구조 설계

프로젝트 루트 디렉터리에 bsp 폴더를 생성하고, 그 안에 Inc(헤더 파일)와 Src(소스 파일) 하위 디렉터리를 구성한다. 이 구조는 외부 장치 드라이버 관리를 체계적으로 만들어준다.

3. VSCode 기반 빌드 환경 구성

생성된 MDK 프로젝트를 VSCode에서 열고, EIDE 확장 프로그램을 통해 프로젝트를 가져온다. 이 과정에서 다음 설정을 수행한다:

  • 컴파일러 설정: ARM Compiler 6(AC6)으로 지정하여 최신 C 표준과 최적화 기능 활용
  • 메모리 맵 구성:
    • Flash 시작 주소: 0x08000000, 크기: 0x20000 (128KB)
    • RAM 시작 주소: 0x20000000, 크기: 0x8000 (32KB)
  • 헤더 검색 경로: <IncludePath> 항목에 ;../bsp/Inc 추가

4. 디버깅 환경 구축

디버그를 위해 다음 절차를 따른다:

  1. ARM GNU Toolchain 설치 후 Cortex-Debug 확장 프로그램에 경로 등록 (arm-none-eabi- 접두사 포함)
  2. EIDE에서 OpenOCD 설치 및 인터페이스 설정 (DAPv1 추천)
  3. 타겟 설정에서 stm32g4x.cfg 구성 파일 선택
  4. AXF → ELF 변환 옵션 활성화 (심볼 정보 보존 목적)

디버그 세션 시작 시, uwTick 변수를 모니터링하면 시스템 틱(ms 단위 증가) 기반으로 함수 실행 시간을 측정할 수 있다. 예를 들어, 초기화 루틴 후 값이 354 증가했다면 해당 작업에 약 354ms 소요됨을 의미한다.

LCD 드라이버 통합

공식 제공 자료에서 HAL 기반 LCD 드라이버를 추출하여 통합한다. 다음 파일을 각각 BSP 폴더에 복사:

  • lcd.h, fonts.hbsp/Inc/
  • lcd.cbsp/Src/

주요 LCD 제어 함수

드라이버 통합 후 아래 API를 통해 디스플레이 제어 가능:

// 디스플레이 초기화
void LCD_Initialize(void);

// 전체 화면 특정 색상으로 지우기
void LCD_ClearScreen(uint16_t color);

// 특정 줄만 지우기
void LCD_ClearRow(uint8_t row_index);

// 배경/전경 색상 설정
void LCD_SetBackgroundColor(uint16_t color);
void LCD_SetForegroundColor(uint16_t color);

// 문자열 출력
void LCD_WriteString(uint8_t row, uint8_t col, char* text);
void LCD_WriteLine(uint8_t line_num, char* content);

사용 예시

메인 루프에서 다음과 같이 호출:

#include "lcd.h"

int main(void) {
    HAL_Init();
    SystemClock_Config();
    LCD_Initialize();
    
    LCD_ClearScreen(BLUE);
    LCD_SetForegroundColor(WHITE);
    LCD_WriteLine(0, "Hello, STM32!");
    
    while(1) {
        // 애플리케이션 로직
    }
}

빌드 및 플래시 후 디스플레이에 텍스트가 정상 출력되는지 확인한다. 초기화 실패 시 하드웨어 연결과 핀맵 일치 여부를 점검해야 한다.

태그: STM32G431 CubeMX vscode EIDE LCD 드라이버

6월 3일 16:59에 게시됨