LVGL图形库从入门到精通 001:LVGL简介与历史背景
去年做一款智能家居中控屏,选了某款国产MCU,RAM只有512KB,Flash 2MB。客户要求界面要有动画过渡、圆角按钮、实时曲线——当时团队里有人提议用uCGUI,有人坚持用TouchGFX。我翻出三年前在STM32F429上跑过的LVGL v7工程,改了改驱动层,三天就把原型跑起来了。后来量产时发现,LVGL的裁剪能力让这块512KB的芯片硬是塞下了完整的智能家居控制界面,还留了30%的RAM做业务逻辑。这就是我为什么决定写这个系列——LVGL不是最炫的,但它是嵌入式图形领域里最“懂”资源受限场景的那个。
从一场“内存溢出”事故说起
2019年帮朋友调试一个温控器项目,用的STM32F103RCT6(256KB Flash,48KB RAM)。他们用某商业GUI库,界面做到第三页就卡死了。我接手后换成LVGL v6,把字体从16px降到12px,动画帧率从60fps降到30fps,最终界面做了7个页面,还加了滑动切换效果。RAM占用峰值只有42KB。那次之后我意识到:LVGL的设计哲学从一开始就是“用最少的资源做最多的事”。
LVGL的全称是Light and Versatile Graphics Library,直译就是“轻量且多功能的图形库”。它的诞生背景很有意思——2016年,匈牙利工程师Gábor Kiss-Vámosi在做工业HMI项目时,发现市面上的嵌入式GUI要么太贵(商业授权),要么太笨重(比如某些Linux下的框架)。他决定自己写一个,目标很明确:能在Cortex-M3上跑,支持触摸,动画流畅,MIT开源协议。这就是LVGL的起点。