1. 课程导学与开发环境搭建

各位同学好,我是老周。做嵌入式GUI开发有些年头了,踩过的坑比吃过的盐还多。今天咱们开始这门《LVGL与TouchGFX移植对比实战》的第一章。

这一章说白了就是热身。但热身也得认真热,不然后面容易拉伤。我会带大家把两个框架的来龙去脉理清楚,再把开发环境搭好。嗯,磨刀不误砍柴工嘛。

1.1 LVGL与TouchGFX概述

先说说这两个框架是什么来头。

LVGL(Light and Versatile Graphics Library),全称轻量级多功能图形库。它是个开源项目,社区活跃度很高。我最早接触LVGL是在2019年,当时一个工业控制项目需要做触摸屏界面,选来选去就看中了它。

TouchGFX呢,最初是瑞典一家公司的产品,后来被ST收购了。它走的是商业路线,但针对STM32芯片有免费版本。我记得第一次用TouchGFX是在STM32F429上做智能家居面板,那个流畅度确实让人眼前一亮。

核心定位差异:

  • LVGL:开源免费,硬件适配广泛,从低端MCU到高端MPU都能跑
  • TouchGFX:与STM32深度绑定,商业授权但免费版功能足够

1.2 对比分析:选哪个更合适?

这个问题我经常被问到。说实话,没有绝对的答案,得看你的项目场景。

对比维度 LVGL TouchGFX
开源协议 MIT,完全免费 商业授权,STM32免费
硬件要求 低,16KB RAM即可起步 较高,建议64KB+ RAM
渲染引擎 软件渲染为主 硬件加速(Chrom-ART)
开发工具 纯代码,或SquareLine Studio TouchGFX Designer图形化
社区生态 非常活跃,文档齐全 ST官方支持,资料集中
学习曲线 中等,C语言基础即可 较低,拖拽式设计

我个人习惯这样选:如果是做消费电子、智能家居这类产品,而且用的是STM32,TouchGFX的开发效率确实高。但如果是工业控制、物联网终端,或者硬件平台不固定,LVGL的灵活性就体现出来了。

我的建议:初学者可以先从LVGL入手,因为它的移植过程能让你真正理解底层原理。等有了基础,再学TouchGFX会事半功倍。

1.3 开发板选型

选开发板这事,我踩过不少坑。曾经为了省钱买了一块低配板子,结果跑TouchGFX卡成PPT,调试了三天才发现是RAM不够。

给大家推荐几块我实际用过的板子:

  • STM32F429I-DISC1:经典入门板,2.4寸屏,240×320分辨率,跑LVGL很流畅
  • STM32F746G-DISCO:带4.3寸电容屏,480×272分辨率,TouchGFX和LVGL都能跑
  • STM32H750B-DK:性能强劲,带RGB接口屏,适合做复杂界面
  • ESP32-S3-LCD-EV-Board:如果不用STM32,这块板子跑LVGL性价比很高

注意:选板子时一定要看屏幕接口。如果是RGB接口,需要MCU有LTDC外设;如果是SPI接口,注意刷新率够不够。我曾经在SPI屏上跑动画,帧率只有15fps,用户体验很差。

1.4 开发环境搭建

环境搭建这部分,我建议大家三种IDE都配好。为什么?因为不同项目、不同团队用的工具不一样。你想想看,如果只会Keil,去了用IAR的公司就傻眼了。

1.4.1 Keil MDK环境

Keil是我用得最多的IDE,稳定可靠。搭建步骤很简单:

  1. 下载安装Keil MDK 5.38或更高版本
  2. 安装对应芯片的Pack包(STM32F4/F7/H7系列)
  3. 配置调试器:J-Link或ST-Link都行
  4. 新建工程,选择芯片型号
// Keil工程配置要点
// 1. 在Options for Target -> C/C++中
//    添加宏定义:USE_HAL_DRIVER, STM32F746xx
// 2. 在Debug选项卡选择调试器
// 3. 在Utilities选项卡勾选"Update Target before Debugging"

1.4.2 IAR Embedded Workbench

IAR的编译优化做得很好,代码密度比Keil高。我个人习惯在需要极致优化时用IAR。

  1. 下载IAR for ARM 9.40+
  2. 安装设备支持包
  3. 创建工程,配置芯片型号
  4. 设置调试器接口(SWD或JTAG)

小技巧:IAR的编译器对C99支持更好,如果你用了一些新语法特性,IAR编译通过率更高。我在移植LVGL时遇到过Keil编译报错,换IAR就过了。

1.4.3 STM32CubeIDE

这是ST官方基于Eclipse的免费IDE。优点是集成了CubeMX,可以图形化配置外设。我建议新手优先用这个,因为配置时钟、GPIO、LTDC这些太方便了。

  1. 从ST官网下载STM32CubeIDE 1.14+
  2. 安装后打开,新建STM32工程
  3. 在CubeMX图形界面配置时钟树、外设
  4. 生成初始化代码,开始编写应用
// CubeIDE中配置LTDC的示例代码片段
// 这部分由CubeMX自动生成,但你需要理解
static void MX_LTDC_Init(void)
{
  hltdc.Instance = LTDC;
  hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  // ... 更多配置由CubeMX生成
}

1.5 知识体系总览

下面这张图是我自己画的,把本章的核心知识点串起来了。你保存好,后面每学一章都可以回来对照看看。

第一章:课程导学与开发环境搭建 LVGL概述 开源·轻量·灵活 TouchGFX概述 商业·ST生态·高效 对比分析 选型决策依据 开发板选型 F429·F746·H750·ESP32 开发环境搭建 Keil·IAR·CubeIDE 本章核心目标 理解LVGL与TouchGFX的定位差异 → 掌握选型方法 → 搭建至少一种开发环境 后续章节将基于本章环境进行实际移植操作 Keil MDK IAR EWARM STM32CubeIDE

1.6 本章小结

这一章我们做了三件事:

  • 搞清楚了LVGL和TouchGFX各自是什么、有什么特点
  • 从多个维度对比了它们的差异,给出了选型建议
  • 搭建了三种主流开发环境,为后续移植做好准备

环境搭好之后,我建议你先别急着往下学。花点时间熟悉IDE的操作,新建一个空工程,编译下载试试。确保LED能闪烁,串口能打印。这些基本功扎实了,后面移植GUI库时才不会手忙脚乱。

避坑提醒:我曾经遇到过一位学员,环境没配好就急着跑LVGL的demo,结果编译报错一百多个。排查了两天才发现是芯片选型错了,Pack没装对。嗯,基础工作别偷懒。