您的位置:

TouchGFX教程详解

TouchGFX是一个用户友好的图形框架,可让开发人员在嵌入式系统中实现令人惊叹的GUI体验。本文将从多个方面对TouchGFX教程进行详细阐述。以下是文章的具体内容:

一、TouchGFX简介

TouchGFX是一个用于嵌入式系统的图形框架,可以让开发人员在较小的闪存和RAM空间上实现出色的用户体验。

TouchGFX提供了许多用于快速创建视觉效果的GUI组件,包括按钮、列表、进度条、滑块、图标等。TouchGFX还提供了丰富的绘图和动画效果,可以创建出令人印象深刻的用户界面。

使用TouchGFX,可以实现高效、流畅的用户体验,同时尽可能地节省处理器时间、电量和闪存空间。TouchGFX还提供了适用于多个MCU系列的开发工具和文档。

二、TouchGFX环境搭建

在使用TouchGFX之前,需要先搭建好TouchGFX环境。以下是一些基本的环境搭建步骤:

1、TouchGFX Studio:下载并安装最新版本的TouchGFX Studio,这是一个可视化环境,可用于创建GUI。TouchGFX Studio自带一个模拟器,用于模拟TouchGFX应用程序。

2、TouchGFX引擎库:下载并安装最新版本的TouchGFX引擎库,这是一个库文件,提供了用于创建GUI的API。TouchGFX引擎库可在您的MCU上运行。

3、触摸屏驱动程序:TouchGFX需要使用触摸屏来与用户交互。请确保从触摸屏供应商处获得正确的触摸屏驱动程序。

完成上述步骤后,您就可以开始使用TouchGFX了。

三、TouchGFX Studio使用

TouchGFX Studio是一个用于创建TouchGFX应用程序的可视化环境。

以下是TouchGFX Studio的一些使用技巧:

1、创建新项目:在TouchGFX Studio中点击“File”->”New Project”,选择适合您的MCU系列并填写项目名称和路径。

2、设计界面:在TouchGFX Studio的“Design”视图中,可以通过拖放组件、更改属性等方式来创建GUI界面。

3、编辑代码:在TouchGFX Studio的“Code”视图中,可以编辑TouchGFX应用程序的代码。TouchGFX Studio使用C++和TouchGFX API编写代码,该API可用于创建TouchGFX应用程序。

运行模拟器:在TouchGFX Studio中点击“Run”按钮(位于左上角),即可开始运行TouchGFX应用程序。模拟器会显示应用程序的GUI界面,并通过模拟器提供的虚拟触摸屏进行交互。

四、TouchGFX API介绍

TouchGFX提供了丰富的API,用于创建GUI和处理用户输入。

以下是TouchGFX API中的一些常用函数:

#include 
#include 
   
#include 
    

// 创建一个文本区域
TextAreaWithWildcard textArea(0, 0, 100, 20);
textArea.setColor(Color::getColorFrom24BitRGB(255, 255, 255));

// 设置一个字体
FontManager::setFont(20, true, FontManager::getDefaultLanguage(), cachedFontPrinter);
textArea.setWildcard(reinterpret_cast
     (u"Hello, World!"));

// 创建一个图像小部件
Image image(0, 0, "myImage.bmp");

// 添加小部件到屏幕
touchgfx::Application::getInstance()->getActiveScreen()->add(textArea);
touchgfx::Application::getInstance()->getActiveScreen()->add(image);

     
    
   
  

五、TouchGFX调试

TouchGFX调试通常包括以下步骤:

1、使用调试器:TouchGFX应用程序可以使用调试器进行调试。在MCU上启动TouchGFX应用程序时,可以使用调试器观察变量和寄存器的值,来检查TouchGFX应用程序中的问题。

2、使用日志:TouchGFX应用程序还可以在运行时生成日志。日志可用于记录TouchGFX应用程序中的错误,并帮助开发人员定位问题。

3、使用模拟器:TouchGFX应用程序可以在模拟器上运行,以进行调试。模拟器提供了TouchGFX应用程序的虚拟触摸屏,可用于模拟TouchGFX应用程序的用户交互。

六、TouchGFX项目实战

以下是一个使用TouchGFX创建STM32F7项目的代码示例:

#include 
#include 
   
#include 
    

using namespace touchgfx;

#define DATA_STORAGE_START_ADDRESS ((uint32_t)&_lfs_data_start)
#define DATA_STORAGE_END_ADDRESS ((uint32_t)&_lfs_data_end)

int main()
{
    HAL::getInstance()->setFrameRateCompensation(true);
    HAL::getInstance()->setTouchSampleRate(2);
    FrontendApplication app;
    app.initialize();
    app.start();

    return 0;
}

extern "C"
{
    extern uint32_t _lfs_data_start;
    extern uint32_t _lfs_data_end;
    extern void touchgfx_flush();
    void DMA2D_IRQHandler(void)
    {
        HAL::getInstance()->DMA2D_IRQHandler();
    }

    void LTDC_IRQHandler(void)
    {
        HAL::getInstance()->LTDC_IRQHandler();
    }
}

void touchgfx_flush_data_transfer(const void* displayData, uint16_t x, uint16_t y, uint16_t w, uint16_t h)
{
    if ((x + w) > (HAL::DISPLAY_WIDTH + 1) || (y + h) > (HAL::DISPLAY_HEIGHT + 1))
    {
        return;
    }

    HAL::getInstance()->beginFrame();

    uint32_t dataStart = reinterpret_cast
     (displayData);
    uint32_t dataEnd = dataStart + (w * h * 2) - 1;
    if (dataStart >= DATA_STORAGE_START_ADDRESS && dataEnd <= DATA_STORAGE_END_ADDRESS)
    {
        HAL::getInstance()->flushBlock(displayData, w, h, HAL::DISPLAY_WIDTH, HAL::DISPLAY_HEIGHT, x, y);
    }

    HAL::getInstance()->endFrame();
}

volatile uint32_t msTicks;

extern "C"
{
void SysTick_Handler()
{
    msTicks++;
}

uint32_t HAL_GetTick(void)
{
    return msTicks;
}
}

void HAL::delay(uint32_t ms)
{
    volatile uint32_t currentTicks = msTicks;
    while ((msTicks - currentTicks) < ms)
        ;
}

void HAL::taskEntry()
{
    HW_Init();

    // Enable Systick timer
    SystemCoreClockUpdate();
    SysTick_Config(SystemCoreClock / 1000);

    MX_DMA_Init();
    MX_LTCD_Init();
    MX_DMA2D_Init();

    init();
}

void HAL::initialize()
{
    static bool initialized = false;
    if (!initialized)
    {
        initialized = true;
        taskEntry();
    }
}

void HAL::taskDelay(uint32_t ms)
{
    delay(ms);
}

     
    
   
  

结语

通过本文,您已经了解了TouchGFX的基础知识和使用方法。TouchGFX是一个非常强大且易于使用的图形框架,可用于在嵌入式系统中创建出色的用户界面。希望本文能对您有所帮助。