2. 开发环境搭建对比:LVGL的PC模拟器(VS Code + SDL)搭建 vs TouchGFX的PC模拟器(STM32CubeIDE + TouchGFX Designer)搭建

说实话,很多初学者卡在第一步——环境搭不起来。我见过太多人,代码写得挺好,结果因为工具链没配好,折腾了两三天还没看到第一个Demo跑起来。这一章,咱们就把两套环境从头到尾捋一遍。

LVGL和TouchGFX的PC模拟器,说白了就是让你在电脑上直接跑GUI,不用烧到板子上。调试效率能提升好几倍。我个人习惯是先在模拟器上把界面逻辑调通,再移植到硬件上。嗯,这样踩坑成本低很多。

核心差异一句话总结:LVGL走的是「编辑器自由 + CMake + SDL」的轻量路线;TouchGFX走的是「STM32CubeIDE全家桶 + 可视化拖拽」的集成路线。一个像搭积木自己选零件,一个像买乐高套装开箱即用。

2.1 LVGL PC模拟器搭建(VS Code + SDL)

LVGL的模拟器,我推荐用VS Code搭配SDL2。为什么?因为VS Code轻量、插件生态好,SDL2跨平台,Windows/macOS/Linux都能跑。你想想看,一套环境三平台通用,多省事。

2.1.1 准备工作

  • VS Code:去官网下载安装,记得勾选「添加到PATH」。
  • CMake:LVGL用CMake构建,版本建议3.16以上。
  • MinGW(Windows)或gcc(Linux/macOS):C编译器,Windows推荐MinGW-w64。
  • SDL2开发库:LVGL的显示和输入依赖SDL2。

我的小技巧:Windows下SDL2别自己编译,直接下载预编译的Development Libraries,解压到固定路径就行。我曾经自己编译SDL2,折腾了一下午,最后发现预编译版直接能用……

2.1.2 搭建步骤

  1. 克隆LVGL模拟器仓库:git clone https://github.com/lvgl/lv_port_pc_vscode.git
  2. 配置SDL2路径:打开项目根目录的 CMakeLists.txt,找到SDL2相关设置,把路径改成你的SDL2安装位置。
  3. 安装VS Code插件:C/C++扩展、CMake Tools扩展、CMake扩展。
  4. 编译运行:按 Ctrl+Shift+P,选择「CMake: Build」,然后按 F5 启动调试。
// CMakeLists.txt 中SDL2路径配置示例(Windows)
set(SDL2_DIR "C:/SDL2-2.26.5/cmake")
find_package(SDL2 REQUIRED)
target_link_libraries(lvgl_sim PRIVATE SDL2::SDL2)

避坑指南:我曾经在Windows上遇到SDL2找不到的问题,原因是MinGW的位数和SDL2库不匹配。64位MinGW必须配64位SDL2库,32位配32位。检查方法:在终端输入 gcc -dumpmachine 看目标架构。

2.1.3 验证环境

编译成功后,你会看到一个窗口,里面跑着LVGL的官方Demo——一个带按钮和滑条的仪表盘界面。能正常点击、滑动,说明环境搭好了。

LVGL模拟器优势:完全脱离硬件,代码改完立刻看到效果。调试时我经常在模拟器里加 printf 打日志,比用硬件JTAG快多了。

2.2 TouchGFX PC模拟器搭建(STM32CubeIDE + TouchGFX Designer)

TouchGFX的环境搭建,说白了就是装两个软件:STM32CubeIDE(IDE)和TouchGFX Designer(可视化设计工具)。这两个东西都是ST官方出品,集成度很高,但体积也大。

2.2.1 准备工作

  • STM32CubeIDE:去ST官网下载,安装包约1.5GB。安装时记得勾选「TouchGFX插件」。
  • TouchGFX Designer:独立安装包,约800MB。也可以从STM32CubeIDE内部下载。
  • Java Runtime:TouchGFX Designer依赖Java,如果电脑没有,安装程序会自动提示。

我建议:先装STM32CubeIDE,再装TouchGFX Designer。顺序反了可能会遇到插件识别不到的问题。我踩过这个坑,后来重装了一遍才解决。

2.2.2 搭建步骤

  1. 安装STM32CubeIDE:一路默认安装,安装路径不要有中文和空格。
  2. 安装TouchGFX Designer:同样默认安装,安装完成后启动一次,确认能正常打开。
  3. 创建TouchGFX项目:打开TouchGFX Designer,选择「New Project」→「Empty Application」→ 选择目标平台为「Simulator」。
  4. 生成代码:在Designer里拖几个控件,点击右上角的「Generate Code」按钮。
  5. 导入到STM32CubeIDE:打开STM32CubeIDE,选择「File」→「Import」→「Existing Projects into Workspace」,选中刚才生成的工程目录。
  6. 编译运行:在STM32CubeIDE里点击「Build All」,然后点击「Run」→「Run As」→「C/C++ Application」。
// TouchGFX模拟器入口代码(自动生成,无需手动修改)
int main() {
    touchgfx::HAL::getInstance()->taskEntry(); // 启动GUI主循环
    return 0;
}

避坑指南:TouchGFX Designer生成的代码,默认编译目标可能是「Release」模式。如果你在模拟器里点了按钮没反应,检查一下是不是编译成了「Debug」模式。Debug模式下模拟器性能会下降,触摸响应变慢。我曾经因为这个排查了半天……

2.2.3 验证环境

编译成功后,会弹出一个模拟器窗口,显示你刚才在Designer里拖拽的界面。点击按钮、滑动屏幕,都能实时响应。

TouchGFX模拟器优势:所见即所得。你在Designer里拖一个按钮,模拟器里立刻就能看到效果。对于UI设计师来说,这个工作流非常友好。

2.3 两套环境对比总结

我把两套环境的搭建要点整理成了表格,方便你对照参考。

对比维度 LVGL (VS Code + SDL) TouchGFX (STM32CubeIDE + Designer)
安装包大小 VS Code ~200MB + SDL2 ~10MB STM32CubeIDE ~1.5GB + Designer ~800MB
搭建耗时 约30分钟(熟练后10分钟) 约1小时(含下载安装)
跨平台支持 Windows/macOS/Linux 仅Windows(官方推荐)
可视化设计 无(需手写代码或第三方工具) 内置TouchGFX Designer拖拽设计
调试体验 VS Code断点调试 + printf日志 STM32CubeIDE断点调试 + 模拟器日志
硬件关联度 完全独立,模拟器与硬件无关 与STM32系列绑定,模拟器模拟特定MCU

我个人觉得,如果你追求轻量和跨平台,LVGL的VS Code + SDL方案更灵活。如果你需要快速出原型、且目标平台就是STM32,TouchGFX的集成环境能省不少事。

2.4 核心逻辑框架图

下面这张图展示了两种环境搭建的核心流程和依赖关系。嗯,画这张图的时候,我特意把「工具链」和「运行时」分开了,方便你理解每一层的作用。

LVGL vs TouchGFX 开发环境搭建对比 LVGL vs TouchGFX 开发环境搭建对比 LVGL 模拟器环境 VS Code(编辑器 + 调试器) CMake(构建系统) MinGW / gcc(编译器) SDL2(显示 + 输入抽象层) LVGL 模拟器窗口 TouchGFX 模拟器环境 TouchGFX Designer(可视化设计) 自动生成 C++ 代码 STM32CubeIDE(IDE + 编译器) 模拟器运行时(SDL后端) TouchGFX 模拟器窗口 VS LVGL:轻量、跨平台、编辑器自由 | TouchGFX:集成、可视化、与STM32深度绑定

从这张图能看出来,LVGL的每一层都是可替换的——你可以换编辑器、换编译器、甚至换显示后端。TouchGFX则是一条完整的工具链,从设计到编译到运行,ST都帮你包好了。说白了,一个像乐高,一个像成品手办。

我的建议:如果你是初学者,可以先从TouchGFX入手,因为可视化设计能让你快速看到成果,建立信心。等你对GUI开发有了整体认知,再回头玩LVGL,你会发现「原来底层是这么回事」。我当年就是先学的TouchGFX,后来转LVGL时,理解起来快很多。