1. 为什么要在STM32F103上折腾LVGL?
如果你手头正好有一块STM32F103的开发板,又恰好配了一块TFT彩屏,比如常见的ST7735s、ILI9341这些,那你肯定想过:能不能在这块小屏幕上做出像手机那样流畅、漂亮的界面?按钮能滑动,图标能渐变,而不是只能显示些简单的文字和方块图。几年前,这个想法实现起来还挺麻烦,要么自己从头写图形库,要么用一些比较笨重的方案。但现在,有了LVGL,这件事就变得现实多了。
LVGL是一个用C语言写的开源图形库,特别适合在单片机这种资源紧张的设备上跑。它本身很轻量,官方说最低只要64KB的Flash和8KB的RAM就能跑起来。但说实话,这个“最低配置”更像是一个理想目标,尤其是在STM32F103C8T6这种只有64KB Flash和20KB RAM的“小钢炮”上,直接照搬官方配置大概率会碰壁。我当初就是不信邪,在C8T6上折腾了好久,各种内存不足的报错看到吐。但这恰恰是学习的乐趣所在,也是我们这篇文章要解决的核心问题:如何在资源有限的STM32F103上,把LVGL这只“大象”塞进冰箱,并且让它还能跳支舞。
这个过程不仅仅是复制粘贴代码,更涉及到对单片机内存的精细规划、对显示驱动的深度理解,以及如何根据手头的硬件(比如你的TFT屏驱动芯片是ST7735s还是ILI9341)进行适配。最终,你会得到一个在你自己硬件上稳定运行的图形界面Demo,一个完全受你控制的“Hello World”。这比单纯点个灯、打印个串口信息要有成就感得多。接下来,我就带你走一遍我踩过坑、验证过的完整移植之路。
2. 动手前的准备工作:理清思路,备齐工具
在开始写代码之前,先把“战场”打扫干净,工具备齐,思路理清,能避免后面很多莫名其妙的错误。
2.1 硬件与软件清单
首先确认你的硬件。我的实验平台是:
- 主控MCU:STM32F103ZET6(Flash容量512KB,RAM容量64KB)。如果你用的是C8T6,别担心,我们的方法同样适用,只是需要在内存配置上更加“抠门”,后面会重点讲。
- 显示屏:1.44寸TFT,驱动芯片为ST7735s,分辨率128x160,色彩格式为RGB565(即一个像素点用16位表示,红5位,绿6位,蓝5位)。这是非常常见的组合。
- 连接方式:通常使用SPI接口驱动,因为STM32F103的FSMC(并口)引脚可能被其他功能占用,且SPI接线简单。
软件方面你需要:
- 开发环境:Keil MDK或者STM32CubeIDE。我个人习惯用STM32CubeMX初始化代码,然后用Keil编译,但用CubeIDE全程操作也一样。
- STM32CubeMX:用于生成HAL库基础工程,配置时钟、SPI、GPIO等。这是神器,能省去大量底层配置时间。
- LVGL源码:去LVGL的GitHub仓库下载。这里有个小建议:对于新手,不建议直接拉取最新的主分支,因为可能包含未稳定的特性。可以下载一个发布版本,比如
v8.3.0或v8.2.0。本文基于v8.2.0进行,版本相对稳定,资料也多。
2.2 工程目录结构规划
好的开始是成功的一半,清晰的目录结构能让后续的添加和调试事半功倍。在STM32CubeMX生成的基

548

被折叠的 条评论
为什么被折叠?



