Skip to main content

Generator User Guide

X-Cube-TouchGFX에 포함되어 있는 TouchGFX Generator는 CubeMX의 Additional-Software 구성 요소로서, 개발자가 TouchGFX를 하드웨어 플랫폼에서 실행되도록 구성할 수 있게 해줍니다. 기존 CubeMX 설정과 사용자 입력을 기반으로 TouchGFX Generator는 동작하는 TouchGFX 애플리케이션을 구성하는 데 필요한 파일을 생성합니다. TouchGFX HAL, TouchGFX OSAL 및 TouchGFX Configuration을 위한 파일이 여기에 해당합니다.

CubeMX를 통해 코드가 생성되고 나면 UI가 개발된 TouchGFX Designer를 통해 TouchGFX 프로젝트를 열 수 있습니다. TouchGFX Designer는 CubeMX의 프로젝트를 위해 구성된 대상 IDE 프로젝트에 추가로 생성된 코드 파일을 자동 추가합니다.

TouchGFX Generator 활성화

아래 그림은 Additional Software 범주 아래에 TouchGFX Generator가 이미 활성화된 프로젝트를 보여줍니다. 사용자는 "Additional Software" 버튼을 눌러서 X-CUBE에서 기능을 추가할 수 있는 액세스 권한을 획득합니다.

CubeMx에서 Additional Software 선택

다음 그림은 프로젝트에서 TouchGFX Generator를 활성화할 수 있는 방법을 보여줍니다:

TouchGFX Generator 활성화

생성 코드 아키텍처

TouchGFX Generator의 기능을 설명하기에 앞서, 생성된 코드의 아키텍처와 개발자가 이를 사용해 구성 및 동작을 사용자 지정하는 방법을 이해하는 것이 중요합니다.

CubeMX에서 생성된 파일에 있는 수기로 작성된 사용자 코드는 CubeMX에서 생성된 코드(C 코드) 전반에 전략적으로 배치된 User Code 섹션을 통해 보호됩니다. TouchGFX Generator에서 생성된 코드(C++ 코드) 에서는 상속을 통해 이러한 유연성이 달성됩니다.

Additional Software를 통해 TouchGFX Generator가 추가되고, 활성화될 때마다 CubeMX는 프로젝트의 TouchGFX 폴라 바뀝니다. 를 생성합니다. 폴더에 있는 파일은 구성에 관계없이 항상 동일하지만, 파일 내용은 CubeMX 및 사용자 구성에 따

아래 목록에는 TouchGFX Generator 가 활성화된 CubeMX 프로젝트의 내용이 개략적으로 나와 있으며, TouchGFX 관련 파일은 강조 표시되어 있습니다. 목록 뒤에 나오는 표에는 가장 중요한 엔트리의 책임이 나와 있습니다:

TouchGFX 폴더
│   .mxproject
│ myproject.ioc
├───Core
├───Drivers
├───EWARM
├───Middlewares
└───TouchGFX
│ ApplicationTemplate.touchgfx.part
├───App
│ app_touchgfx.c
│ app_touchgfx.h
└───target
│ STM32TouchController.cpp
│ STM32TouchController.hpp
│ TouchGFXGPIO.cpp
│ TouchGFXHAL.cpp
│ TouchGFXHAL.hpp

└───generated
OSWrappers.cpp
TouchGFXConfiguration.cpp
TouchGFXGeneratedHAL.cpp
TouchGFXGeneratedHAL.hpp
폴더책임
myproject.iocCubeMX 프로젝트 파일
Coremain.c 및 스타트업 코드
DriversCMSIS 및 MCU 제품군 드라이버
EWARMIDE 프로젝트폴더 (EWARM, MDK-ARM 또는 STM32CubeIDE)
MiddlewaresTouchGFX 라이브러리/헤더파일과 FreeRTOS 같은 타사 소프트웨어가 포함되어 있습니다.
ApplicationTemplate.touchgfx.part.part 파일은 TouchGFX Designer 프로젝트에 해당하는 정보(예: 화면 크기 및 비트 심도)로 CubeMX에서 업데이트됩니다.
AppCubeMX에 대한 X-CUBE 인터페이스. app_touchgfx.c에는 TouchGFX를 개시하고 메인 루프를 시작하는 데 사용되는 함수 MX_TouchGFX_Process(void) 및 MX_TouchGFX_Init(void)에 대한 정의가 포함되어 있습니다.
target/generated이 하위 폴더에는 구성 변경 시 CubeMX에서 덮어 쓰기한 읽기 전용 파일이 포함되어 있습니다. TouchGFXGeneratedHAL.cpp는 TouchGFX 클래스 HAL의 하위 클래스로, CubeMX가 현재 구성을 토대로 생성할 수 있는 코드가 포함되어 있습니다. OSWrappers.cpp  (OSAL)에는 TouchGFX Engine과의 동기화에 필요한 함수가 포함되어 있고, 마지막으로 TouchGFXConfiguration.cpp에는 HAL을 포함하여 TouchGFX를 구성하기 위한 코드가 포함되어 있습니다.
targetHAL의 동작을 확장하거나 CubeMX에서 생성된 구성을 치환(override) 하기 위해 사용자가 수정할 수 있는 파일이 대거 포함되어 있습니다. STM32TouchController.cpp에는 빈 터치 컨트롤러 인터페이스가 포함되어 있습니다. TouchGFXHAL.cppTouchGFXGeneratedHAL의 하위 클래스인 TouchGFXHAL을 정의합니다.

TouchGFXConfiguration.cpp에는 HAL을 구성하는 함수와 TouchGFX의 메인 루프를 시작하는 함수가 포함되어 있다는 점이 중요합니다. 편집이 가능한 사용자 클래스 TouchGFXHAL에서 추가 구성이 가능합니다. HAL의 일반적인 아키텍처는 아래와 같습니다:

생성된 코드의 계층 구조

기능 개요

TouchGFX Generator가 활성화되면 사용자 인터페이스에 다음과 같이 3개의 그룹이 존재합니다:

  • Dependencies - 이 그룹에는 구성에서의 종속성, 경고 또는 구체적 오류에 대해 개발자에게 제공되는 알림이 포함되어 있습니다. 엔트리가 없는 경우에는 이 그룹이 숨겨집니다.
  • Display - 이 그룹에는 인터페이스, 프레임 버퍼 비트 심도, 너비 및 높이 같이 디스플레이와 관련된 설정이 포함되어 있습니다. 이러한 설정은 TouchGFX 프로젝트의 캔버스 크기는 물론이고 자산에 대해 생성된 코드에 직접적인 영향을 미칩니다.
  • Driver - 이 그룹은 사용자가 애플리케이션, 그래픽 가속기 및 RTOS의 틱 소스와 관련된 다양한 기성 드라이버에 대해 옵트인(opt-in) 할 수 있게 지원합니다. CubeMX는 FreeRTOS(CMSIS RTOS v1 및 v2) 구성을 지원하므로 TouchGFX Generator는 이러한 옵션 각각에 드라이버를 제공합니다.

TouchGFX Generator에는 Dependencies, Display, Driver 등 3개의 그룹이 있습니다.

Display

Display 그룹에는 디스플레이와 관련된 구성(예: 인터페이스, 크기 및 버퍼링 전략) 이 포함되어 있습니다.

Interface and dimensions

현재 STM32 마이크로컨트롤러서는 다음과 같이 여러 디스플레이 인터페이스를 사용할 수 있습니다.

  • 병렬 RGB
  • MIPI DSI
  • FMC
  • SPI

LTDC가 장착된 MCU의 경우, TouchGFX Generator는 연결된 디스플레이에 프레임 버퍼를 전송하기 위한 드라이버를 생성할 수 있습니다. DSI, FMC 그리고 SPI 인터페이스의 경우 개발자가 자체적으로 드라이버를 구현해야 합니다.

Further reading
서로 다른 디스플레이 인터페이스에 대한 드라이버의 구체적인 예는 시나리오 섹션을 참조하십시오.

Buffering Strategy

TouchGFX Generator를 통해 다음과 같은 프레임 버퍼 전략을 구성할 수 있습니다:

  • Single Buffer (단일 버퍼) - 오직 하나의 애플리케이션 프레임 버퍼만 사용합니다. 성능이 제한될 수 있지만, 메모리를 비교적 덜 사용합니다. 'Buffer Location' 구성을 사용해 내부 RAM에 배치할 수 있습니다. 추가적인 최적화를 위해 사용자는 디스플레이 컨트롤러에서 현재 처리 중인 라인을 반환하는 함수를 정의할 수 있습니다. 프레임워크에서 이 방법을 사용하면 현재 프레임 동안 디스플레이에 이미 전송된 메모리를 업데이트할 수 있습니다.
  • Double Buffer (이중 버퍼) - 2개의 프레임 버퍼를 사용합니다. 보통은 메모리의 비용 대비 성능을 높일 수 있습니다.
  • Partial Buffer (부분 버퍼) - 프레임 버퍼에서 사용자가 정의한 1개 이상의 메모리 집합체(chunk) 를 사용합니다. 이 전략은 외부 RAM에 의존하지 않고 전체 프레임 버퍼가 가용 메모리를 초과할 수 있도록 디스플레이를 사용하는 저비용 솔루션을 대상으로 합니다.

Single Buffer 및 Double Buffer의 경우, 사용자가 다음과 같은 옵션을 제공하는 "Buffer Location" 구성을 통해 위치를 구성할 수 있습니다.

  • By Allocation - 링커가 링커 스크립트에 따라 프레임 버퍼 메모리를 배치할 수 있게 지원합니다. 내부 RAM에 배치되도록 기본 설정되어 있습니다.
  • By Address - 사용자가 1개(Single) 또는 2개(Double) 의 프레임 버퍼 주소를 정의할 수 있게 해줍니다.

Partial Buffer 전략에서는 사용자가 다음과 같은 파라미터를 정의할 수 있습니다.

  • 블록 수(내부 RAM에 항상 배치)
  • 블록 크기(바이트)

부분 버퍼 전략과 관련된 몇 가지 핵심 개념들을 이해하려면 부분 프레임 버퍼를 이용한 메모리 요구 사항 감소에 대한 전용 문서를 읽어보시기 바랍니다. 이 문서에서는 부분 프레임 버퍼를 달성하는 방법을 개념적으로 보여주며, 여기 나온 코드는 TouchGFX Generator에서 생성된 것과 다소 차이가 있습니다. 이러한 전략에 대해 생성된 코드의 구체적인 예는 프레임 버퍼 전략을 참조하시기 바랍니다.

Driver

드라이버 섹션에서 개발자는 TouchGFX AL의 다양한 책임에 맞는 드라이버를 선택할 수 있습니다.

Application Tick Source

애플리케이션을 위한 application tick source는 애플리케이션을 구동하는 방법을 정의합니다. 개발자에게는 다음과 같은 옵션이 제공됩니다:

  • LTDC - "Display" 그룹에서 인터페이스로 LTDC를 선택하면 'LTDC'가 Application Tick Source 가 될 수 있습니다. 즉, TouchGFX GeneratorOSWrappers::signalVSync()를 호출하여 애플리케이션을 진행시키는 TouchGFXGeneratedHAL 클래스에 드라이버 함수(LTDC 인터럽트 핸들러)를 설치합니다.
  • Custom - 이 경우, 개발자는OSWrappers::signalVSync()를 반복적으로 호출하여 애플리케이션을 진행시키는 핸들러를 구현해야 합니다.

Graphics Accelerator

개발자는 그래픽 가속과 관련해 세 가지 옵션을 갖게 됩니다:

  • None - 애플리케이션이 프레임 렌더링을 위해 CPU만 사용합니다.
  • Chrom-ART(DMA2D) - 애플리케이션이 가능하면 Chrom-ART 칩을 사용해 픽셀을 이동 및 혼합하기 때문에 CPU 주기가 단축됩니다. TouchGFX Generator가 드라이버를 설치하므로 개발자는 어떠한 조치도 취할 필요가 없습니다.

TouchGFX Generator에서 공급되는 Chrom-ART(DMA2D) 드라이버에서는 두 가지 방식으로 TransferCompleteInterrupt를 수신할 수 있습니다.

  1. STM32Cube HAL 드라이버를 사용해 dma2d 핸들러 hdma2d.XferCpltCallback에 콜백 함수를 등록합니다.
  2. DMA2D_IRQHandler() 인터럽트 핸들러를 직접 사용합니다.

DMA2D IP의 경우 CubeMX의 NVIC 설정에서 DMA2D 전역 인터럽트를 활성화 또는 비활성화하여 두 방법 간의 전환이 가능합니다. 전역 인터럽트를 활성화하면 옵션 1) 에 대한 코드가 생성되고, 전역 인터럽트를 비활성화하면 옵션 2) 에 대한 코드가 생성됩니다.

Note
  • DMA2D에서 전역 인터럽트를 사용할 때는 'IRQ handler'가 'DMA2D HAL 핸들러'를 호출하는지 확인합니다(이것이 기본 설정된 동작).
  • 전역 인터럽트가 활성화된 상태에서 DMA2D에서 'IRQ handler' 및 'Call HAL handler'를 비활성화하면 등록된 콜백(callback) 이 절대로 호출되지 않습니다.
  • Real-Time Operating System

    개발자는 TouchGFX에서 어떤 RTOS든 사용할 수 있습니다(OS가 없는 경우에도). AL(Abstraction Layer) 아키텍처에 설명되어 있듯이, TouchGFX Engine은 OSWrappers 인터페이스를 사용해 메인 이벤트 루프를 비롯해 프레임 버퍼 액세스를 사용자가 선택한 RTOS와 동기화합니다.

    CubeMX와 TouchGFX Generator 내에서 직접 FreeRTOS를 구성하여 작업 정의 및 TouchGFX RTOS 드라이버 모두에 사용자가 생성한 코드를 부여할 수 있습니다. TouchGFX Generator는 어떤 CMSIS 호환 RTOS에서도 작동이 가능한 CMSIS V1 및 CMSIS V2 호환 RTOS 드라이버를 생성할 수 있습니다. 이 경우, 개발자는 CubeMX를 사용해 작업 정의에 대한 코드를 생성할 수 없기 때문에 사용자 코드에서 이 작업을 수행해야 합니다.

    아래 그림은 TouchGFX Generator를 통해 사용 가능한 옵션들입니다.

    RTOS 드라이버 옵션

    다음 함수를 호출하면 TouchGFX 메인 루프에 들어갑니다.

    void MX_TouchGFX_Process(void);

    개발자는 TouchGFX 애플리케이션을 실행하려는 작업에 대한 작업 핸들러에서 이 함수를 호출해야 합니다. 아래 예제는 사용자가 DefaultTask라는 CubeMX에서 FeeRTOS 작업을 구성한 경우에 작업 핸들러의 사용자 코드 섹션에서 TouchGFX를 시작하기 위해 MX_TouchGFX_Process()가 어떻게 호출되는지를 보여줍니다.

    void StartDefaultTask(void *argument)
    {
    /* USER CODE BEGIN 5 */
    MX_TouchGFX_Process();
    /* USER CODE END 5 */
    }

    FreeRTOS가 활성화되면 CubeMX는 스케줄러를 시작하는 sKernelStart();에 대한 호출도 생성합니다.

    기타 CMSIS 호환 OS

    CubeMX가 제공할 수 있는 OS(FreeRTOS) 와 다른 CMSIS 호환 OS가 필요한 개발자는 RTOS 구성 및 작업 정의를 수동으로 수행해야 합니다. 일반적으로 다음과 같은 수동 단계를 거쳐야 합니다:

    1. RTOS 구성
    2. TouchGFX(MX_TouchGFX_Process) 를 실행하기 위한 작업 정의
    3. 스케줄러 시작

    아래는 Azure RTOS에서 2단계와 3단계를 수행하는 방법에 대한 예제입니다. CubeMX에서는 이러한 구성을 전혀 지원하지 않기 때문에 코드가 재작성되지 않게 하려면 주어진 사용자 코드 섹션에서 모든 구성을 수행해야 합니다. 아래 코드는 GUI 작업 정의에 대한 의사 코드를 보여줍니다. 일반적으로 CubeMX에서 생성되지 않은 코드는 파일 main.c에 분산되어 있는 사용자 코드 섹션(user code sections)에 배치해야 합니다.

    /* BEGIN USER CODE SECTION */
    #include "tx_api.h"

    #define GUI_THREAD_STACK_SIZE 1024
    TX_THREAD gui_thread;
    void gui_thread_entry(ULONG thread_input); //Thread prototype
    /* END USER CODE SECTION */

    int main()
    {
    /* BEGIN USER CODE SECTION - Choose an appropriate one from main.c */
    /* Allocate the stack for gui thread */
    tx_byte_allocate(...);

    /* Create the gui thread. */
    tx_thread_create(&gui_thread, "GUI Thread", gui_thread_entry, 0,
    pointer, GUI_TASK_STACK_SIZE,
    1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);

    /* END USER CODE SECTION*/

    MX_TouchGFX_Process를 호출해 작업 핸들러 내부의 TouchGFX Engine 메인 루프를 시작합니다.

    /* BEGIN USER CODE SECTION */
    void gui_thread_entry(ULONG thread_input)
    {
    MX_TouchGFX_Process();
    }
    /* END USER CODE SECTION*/

    스케줄러를 시작해 GIU 작업과 TouchGFX 애플리케이션을 개시합니다.

    /* BEGIN USER CODE SECTION */
    tx_kernel_enter();
    /* END USER CODE SECTION*/

    추가 기능

    External Data Reader

    RGB565 프레임 버퍼 픽셀 형식에서 TouchGFX는 소위 Data Reader라는 인터페이스를 지원합니다. 덕분에 개발자는 메모리에서 추가 버퍼로 인한 비용이 발생하는 캐싱 대신, 메모리 매핑이 되지 않은 시리얼 플래시에서 직접 데이터를 읽어올 수 있습니다. 플래시 칩에서 애플리케이션 자산을 검색하기 위해 DataReader를 구현하는 방법에 대한 예는 시리얼 플래시 문서를 참조하시기 바랍니다.

    Data Reader 옵션은 보통 추가 버퍼에 대한 메모리가 충분하지 않은 저가 솔루션(예: STM32G0)에서 사용됩니다. DMA2D가 활성화되어 있는 경우에는 이 플래시를 사용할 수 없습니다.

    프레임 버퍼 픽셀 형식으로 RGB565가 선택되면 Additional Features 그룹을 사용할 수 있게 됩니다.

    추가 기능: DataReader

    개발자는 다음과 같이 구성을 수행할 수 있습니다:

    • External Data Reader: 이 기능을 활성화 또는 비활성화합니다. 활성화를 하면 TouchGFX가 생성된 인터페이스를 통해 직접 자산에 대한 데이터를 검색하게 됩니다. 비활성화를 하면 개발자가 대신 메모리의 버퍼에 이미지를 캐싱해야 합니다.
    • External Data Reader: Line Buffer Size: 프레임 버퍼에 이미지 또는 텍스트를 혼합할 수 있도록 2개의 버퍼를 생성합니다. ARGB8888 픽셀 형식에서 풀 사이즈 이미지를 지원하도록 화면 너비* 4바이트가 기본 값입니다.
    • External Data Reader: Minimum DMA transfer size: DMA 전송을 시작하기 위해 필요한 최소한의 바이트를 설정합니다. 더 많은 바이트가 요청된 경우에는 DMA가 사용되지 않습니다.

    External Data Reader가 활성화된 상태에서 코드를 생성한 후에는 메모리 매핑이 되지 않은 플래시에서 직접 자산을 검색할 수 있도록 다음과 같은 파일이 추가로 생성됩니다.

    • TouchGFX/target/generated/TouchGFXGeneratedDataReader.cpp
    • TouchGFX/target/generated/TouchGFXGeneratedDataReader.hpp
    • TouchGFX/target/TouchGFXDataReader.cpp
    • TouchGFX/target/TouchGFXDataReader.hpp

    평소처럼 TouchGFX Generator에서 생성된 코드의 경우 TouchGFXGeneratedDataReader는 읽기 전용이고 TouchGFXDataReader 클래스 내에서 수정 작업을 수행해야 합니다. TouchGFXGeneratedDataReader의 유형은 touchgfx::FlashDataReader입니다.

    DataReader를 사용하도록 TouchGFX HAL를 구성하기 위해 다음과 같은 파일이 수정됩니다.

    • TouchGFX/target/generated/TouchGFXConfiguration.cpp
    • TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp
    • TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp
    Note
    DataReader 추가 가능은 DMA2D 및 LTDC가 비활성화된 경우에만 사용할 수 있습니다.

    8bit LTDC Color Look-up Table

    L8 형식으로 프레임 버퍼를 읽도록 LTDC가 구성되어 있고 TouchGFX가 ABRG2222ARGB222BGRA2222 또는  RGBA2222에서 렌더링되면 TouchGFX Generator는 TouchGFXHAL::initialize(). 동안 LTDC에 로드되는 CLUT를 제공합니다. LTDC 및 CLUT 사용에 대한 자세한 내용은 STM32 MCU 참조 매뉴얼을 참조하시기 바랍니다.

    생성된 프로젝트

    TouchGFX는 CubeMX에서 Generate Code 버튼을 사용해 코드를 생성할 때 (최소한) 아래와 같은 IDE에서 작동합니다.

    1. EWARM
    2. MDK-ARM
    3. STM32CubeIDE

    최적의 프로젝트 구조를 위해 다음과 같은 프로젝트 생성 옵션을 선택합니다:

    • 애플리케이션 구조: Advanced
    • Generate under root 비활성화(STM32CubeIDE 전용)

    최적의 프로젝트 구조를 위해 다음과 같은 프로젝트 생성 옵션을 선택합니다:

    • 애플리케이션 구조: Advanced
    • Generate under root 비활성화(STM32CubeIDE 전용)

    Advanced 애플리케이션 구조를 선택하고 루트 아래 Generate의 선택을 해제

    또한 CubeMX는 다음과 같은 구조를 가진 *TouchGFX*폴더도 생성합니다.

    TouchGFX 폴더 구조

    • App 폴더에는 TouchGFX를 개시 및 시작하기 위한 코드가 포함되어 있습니다.
    • target 폴더에는 읽기 전용으로 생성된 코드(generated/ 내부의)와 수정 가능한 사용자 클래스(STM32TouchController.cppTouchGFXGPIO.cpp  TouchGFXHAL.cpp)가 포함되어 있습니다.
    • TouchGFX 헤더 파일 및 라이브러리를 완전히 갖춘 전체 TouchGFX 프로젝트를 생성할 수 있도록 TouchGFX Designer를 사용해.part 파일을 열 수 있습니다. 이 파일에는 픽셀 형식과 TouchGFX 애플리케이션 코드를 생성할 때 설계자가 사용하는 캔버스 크기 같이 관련된 애플리케이션 정보가 포함되어 있습니다.

    TouchGFX Designer 프로젝트

    아래 코드는 생성 코드 아키텍처 섹션에서 언급된.part 파일의 내용에 대한 예제입니다. 아래 나와 있는 post-generate 명령은 TouchGFX 설계자가 새로운 파일을 생성할 때(예: 새로운 화면 및 자산) CubeMX에 선택되어 있는 프로젝트(예: EWARM)를 업데이트합니다.

    {
    "Application": {
    "Name": "my_project",
    "TouchGfxPath": "../Middlewares/ST/touchgfx",
    "AvailableColorDepths": [ 16 ],
    "AvailableLCDs":
    {
    "16": "LCD16bpp"
    },
    "AvailableResolutions" :
    [
    {
    "Width": 320,
    "Height": 240
    }
    ],
    "PostGenerateTargetCommand" : "touchgfx update_project --project-file=../my_project.ioc --platform=m7"
    },
    "Version": "4.13.0"
    }

    TouchGFX Designer에서.part 파일을 열 때 개발자에게는 구체적인 UI를 로드하거나 빈 템플릿에서 시작할 수 있는 옵션이 제공됩니다.

    UI 선택

    TouchGFX Designer에서 Generate Code를 누르고 난 이후의 TouchGFX 폴더의 구조는 아래와 같습니다. 아래 그림에는 TouchGFX 폴더 구조의 구체적인 예가 나와 있는데, 생성 이후 새로 생긴 파일과 폴더가 강조 표시되어 있습니다.

    코드 생성

    TouchGFX 폴더 구조

    TouchGFX는 .ioc CubeMX 파일에서 선택된 IDE를 탐지하고(STM32CubeIDE, EWARM, MDK-ARM의 경우), 화면 정의, 이미지 및 폰트 자산을 위한 파일과 같이 새롭게 생성된 파일로 프로젝트 파일을 업데이트합니다.

    이때 개발자는 CubeMX, TouchGFX Designer 및 툴체인/IDE에서 번갈아 가며 작업을 수행할 수 있습니다:

    • CubeMX는 드라이버로 IDE 프로젝트를 업데이트합니다.
    • CubeMX는 설계자가 즉시 가져올 수 있는 UI 관련 변경 사항으로 TouchGFX .part 파일을 업데이트합니다.
    • CubeMX는 TouchGFX가 특정 플랫폼에서 작동하기 위해 필요한 TouchGFX Generator 구성을 토대로 HAL 코드(TouchGFX/target/generated/) 를 생성합니다.
    • TouchGFX Designer는 생성된 코드로 프로젝트를 업데이트합니다.

    생성된 동작 수정

    HAL의 클래스 계층 구조로 인해 사용자가 CubeMX에서 생성된 HAL 구성 또는 동작을 재정의할 수 있음에 유의해야 합니다. 아래 예제에서 개발자는 추가로 TouchGFX를 구성하거나TouchGFXGeneratedHAL에 설정된 기존 구성을 수정하도록 initialize 함수를 수정할 수 있습니다.

    TouchGFXHAL.cpp
    void TouchGFXHAL::initialize()
    {
    // Calling parent implementation of initialize().
    //
    // To overwrite the generated implementation, omit call to parent function
    // and implemented needed functionality here.
    // Please note, HAL::initialize() must be called to initialize the framework.

    TouchGFXGeneratedHAL::initialize();

    //Overriding configurations
    hal.lockDMAToFrontPorch(true);
    hal.setFingerSize(4);
    hal....
    }

    프로젝트 업그레이드

    TouchGFX Generator 파라미터는 .ioc 파일(CubeMX 프로젝트)에 저장됩니다. 새로운 버전의 TouchGFX Generator가 출시되면 이전 버전의 파라미터가 새 버전과 호환이 되지 않아서 마이그레이션이 필요할 수 있습니다.

    CubeMX는 X-CUBE 버전 간의 업그레이드를 지원하지 않으므로.touchgfx 파일의 PostGenerateTargetCommand 섹션에서 다음과 같은 명령으로 인해 Generate Code가 눌러졌을 때 TouchGFX Designer에 의해 업그레이드가 자동으로 수행됩니다.

    .touchgfx
    "PostGenerateTargetCommand" : "touchgfx update_project --project-file=../upgrade.ioc --platform=m7"

    이 명령은 .ioc 파일을 읽고 X-CUBE-TOUCHGFX의 현재 버전에 맞게 파라미터를 업데이트합니다. 아래에는 X-CUBE-TOUCHGFX 4.13.0에서 생성된 .ioc 파일에서 직접 스크립트(X-CUBE-TOUCHGFX 4.14.0)를 실행하는 예입니다.

    STM32F746 DISCO 애플리케이션 템플릿을 사용하여 4.13.0을 4.14.0으로 업그레이드하는 작업 예제
    $ touchgfx update_project --project-file=../STM32F746G_DISCO.ioc
    TouchGFX Generator 4.13.0 found
    Creating backup of ../STM32F746G_DISCO.ioc as ../backup_STM32F746G_DISCO.ioc
    Performing upgrade 4.13.0 -> 4.14.0 ... OK

    CubeMX로 업데이트된 프로젝트를 열면 사용자에게 .ioc 파일에 나와 있는 버전의 X-CUBE-TOUCHGFX를 설치하라는 메시지가 표시됩니다(아직 설치되지 않은 경우). Download now를 클릭하면 X-Cube-TouchGFX-4.14.0이 다운로드 및 설치됩니다.

    추가 소프트웨어 구성 요소 누락: TouchGFX Generator 4.14.0

    업그레이드 절차가 진행되는 동안 TouchGFX Generator의 모든 구성이 유지되고, .ioc 파일의 백업이 앞에 backup_이 붙어 있는 원본과 나란히 배치됩니다.

    Note
    TouchGFX Generator에서 제공하는 새로운 기능들을 사용하려면 CubeMX에서 Generate Code를 수행해야 합니다.
    Caution
    기존 TouchGFX 프로젝트에서 CubeMX를 통해 X-CUBE-TOUCHGFX를 업그레이드하고 업그레이드 프로세스가 TouchGFX Designer에서 실행되지 않는 경우, TouchGFX Generator 파라미터가 기본값으로 재설정됩니다. 왜냐하면 다른 버전에 적용되기 때문입니다.