第一课:课程导学与硬件准备

各位同学好,我是你们这门课的老朋友。说实话,每次开新课前我都有点小兴奋——因为屏幕驱动和LVGL图形库,这俩东西凑在一起,能玩出的花样实在太多了。

今天咱们先不急着写代码,先把「家伙事儿」备齐了。你想想看,做嵌入式开发,硬件没准备好,后面全是纸上谈兵。我当年刚入行时,就吃过这个亏——板子还没捂热乎呢,就急着调代码,结果发现屏幕死活不亮,排查了半天,原来是排线没插紧……嗯,这种低级错误,咱们今天一次性避开。

1.1 游戏机屏幕驱动与LVGL的关系

先聊个核心问题:为什么要把屏幕驱动和LVGL放在一起讲?

说白了,屏幕驱动是「翻译官」,它负责把像素数据转换成屏幕能识别的电信号。而LVGL是「设计师」,它帮你画按钮、菜单、进度条这些花里胡哨的界面。两者缺一不可。

我个人的理解是这样的:

  • 屏幕驱动层:处理时序、初始化、像素填充。比如ILI9341的初始化序列,写错了屏幕就花屏。
  • LVGL图形库层:管理控件、事件、动画。它不关心底层怎么刷像素,只调用你提供的「画点」函数。

举个例子,你想在屏幕上显示一个红色按钮:

  • LVGL负责计算按钮的坐标、颜色、圆角
  • 屏幕驱动负责把这一块区域的像素全部刷成红色

所以,这两层必须配合好。我在项目中遇到过有人把LVGL移植好了,但屏幕驱动没优化,结果刷一帧要500ms,卡得跟幻灯片似的。你说这能忍吗?

核心结论:屏幕驱动是LVGL的「地基」。地基不稳,楼盖得再漂亮也得塌。

1.2 开发板选型:ESP32 vs STM32

咱们这门课主要用两块开发板:ESP32STM32。为什么选这俩?

特性 ESP32 STM32(如F407)
主频 240MHz 168MHz
RAM 520KB(部分型号更大) 192KB
WiFi/蓝牙 内置 需外挂
LVGL流畅度 中等(适合320x240分辨率) 较高(带LTDC的型号更佳)
价格 便宜(20-40元) 中等(30-80元)

我个人习惯是:原型验证用ESP32,因为自带WiFi,调试方便;产品落地用STM32,因为稳定性好,外设丰富。你如果刚入门,建议先玩ESP32,成本低,社区资料也多。

小提示:买ESP32时注意选「ESP32-WROOM-32」模组,别买成ESP8266了。后者RAM太小,跑LVGL会很吃力。

1.3 屏幕模块:ILI9341与ST7789

屏幕这块,咱们主要接触两种驱动IC:ILI9341ST7789

  • ILI9341:老牌驱动,支持240x320分辨率,16位/18位色深。我最早做游戏机屏幕时用的就是它,驱动时序比较标准,网上例程一抓一大把。
  • ST7789:后起之秀,支持135x240或240x240分辨率,常用于小尺寸圆屏。它的初始化序列比ILI9341短,但有些寄存器配置比较坑——我曾经因为一个SPI模式位没设对,屏幕显示全是反色,查了两天才找到原因。

选屏幕时注意几点:

  1. 接口类型:SPI接口最常见,引脚少(MOSI、MISO、SCLK、CS、DC、RST),适合新手。并行接口(如8080)速度快,但占引脚多,不推荐初学者用。
  2. 触摸功能:如果屏幕带触摸(如XPT2046),记得买配套的触摸板。我建议第一块屏幕先买不带触摸的,把显示调通了再考虑交互。
  3. 排线:买屏幕时通常会送FPC排线,注意检查排线间距(常见0.5mm或1.0mm)。我曾经手头只有0.5mm排线,结果屏幕接口是1.0mm的,硬塞进去把座子捅坏了……

避坑指南:我曾经买过一块「兼容ILI9341」的屏幕,结果初始化序列跟标准版不一样,花了我一整天去读数据手册。所以,尽量买原厂或大厂的屏幕模块,别贪便宜买杂牌。

1.4 接线工具与准备工作

硬件到手了,怎么连?我列个清单:

  • 杜邦线:公对母、母对母各来20根。颜色最好区分开(红色接VCC,黑色接GND,其他颜色接信号线)。
  • 面包板:用来临时搭建电路,方便调试。
  • 逻辑分析仪:强烈推荐!8通道的也就几十块钱。调SPI时序时,没有它你只能靠猜。
  • USB转TTL模块:如果开发板没有串口,可以用它打印调试信息。
  • 烙铁和焊锡:有些屏幕模块需要焊接排针,别偷懒,焊牢了再上电。

接线时记住一个原则:先接电源和地,再接信号线。我见过有人先把所有信号线接好,最后接电源时不小心短路,屏幕直接冒烟了……嗯,这种事发生一次就长记性了。

1.5 开发环境搭建(快速预览)

咱们后面会详细讲环境搭建,这里先提一嘴:

  • ESP32:用Arduino IDE或ESP-IDF。我个人推荐Arduino IDE入门,简单粗暴。
  • STM32:用STM32CubeIDE或Keil。CubeIDE免费,Keil要钱但用的人多。
  • LVGL:从GitHub下载源码,版本选v8.x(稳定)。v9.x虽然新,但API变化大,咱们课程以v8.3为例。

你可能会问:「老师,我能不能用PlatformIO?」当然可以。工具这东西,顺手就行。我最早用Keil,后来转VS Code + PlatformIO,现在又用回STM32CubeIDE了——说白了,没有最好的工具,只有最适合当前项目的工具。

1.6 本章小结与作业

今天咱们把课程脉络理清了,硬件也备齐了。你记住三件事:

  1. 屏幕驱动是底层,LVGL是上层,两者通过「画点函数」衔接。
  2. ESP32适合快速原型,STM32适合产品开发。
  3. 接线前先看数据手册,别凭感觉来。

课后作业:

  • 把你的开发板和屏幕用杜邦线连起来(先不接电源)。
  • 去GitHub搜一下「LVGL v8.3」,把源码下载到本地。
  • 在开发板上跑一个「LED闪烁」例程,确认环境没问题。

下一课,咱们正式开始写屏幕驱动代码。到时候我会手把手教你怎么让屏幕亮起来——那种感觉,比第一次点亮LED爽多了。

公众号:蓝海资料掘金营,微信deep3321