4、MCU平台选型与准备:常见MCU(STM32/ESP32)、开发板选择、IDE与工具链、硬件连接图
做LVGL显示驱动,第一步就是选硬件。说白了,你得先决定让代码跑在什么芯片上。
我这些年接触最多的就是STM32和ESP32。这两类芯片在LVGL社区里也是最活跃的。你想想看,一个项目如果选错了平台,后面调驱动、调性能,那真是事倍功半。所以这一章,咱们把选型和准备工作聊透。
4.1 常见MCU选型对比:STM32 vs ESP32
先看一张对比表,心里有个底。
| 对比维度 | STM32 (F4/H7系列) | ESP32 (S3/C3系列) |
|---|---|---|
| 内核架构 | Cortex-M4 / M7 | Xtensa LX7 / RISC-V |
| 主频 | 168MHz ~ 480MHz | 240MHz ~ 480MHz |
| SRAM | 192KB ~ 1MB | 512KB ~ 8MB (PSRAM) |
| Flash | 1MB ~ 2MB (内部) | 4MB ~ 16MB (外部SPI Flash) |
| 硬件外设 | LTDC, DSI, FMC, DMA2D | LCD接口, I2S, USB-OTG |
| LVGL适配难度 | 中等(需配置显存和DMA2D) | 较低(ESP-IDF有现成组件) |
| 典型应用场景 | 工业HMI、医疗设备、高端仪表 | 智能家居、物联网屏、低成本HMI |
我个人习惯是:如果项目对实时性要求高,或者需要跑复杂的动画(比如多图层叠加、Alpha混合),我会优先选STM32F429或H743。它们有硬件LTDC和DMA2D,刷屏效率确实高。
但如果项目需要Wi-Fi或蓝牙,或者成本敏感,那ESP32-S3就是更好的选择。我记得去年做一个智能家居面板,客户要求带Wi-Fi OTA升级,同时屏幕分辨率只有480x320。用ESP32-S3加外部PSRAM,跑LVGL非常流畅,成本还比STM32方案低了30%。
核心结论: 没有最好的MCU,只有最合适的。选型时先问自己三个问题:
- 屏幕分辨率多大?是否需要双缓冲?
- 是否需要无线通信?
- 量产成本预算是多少?
4.2 开发板选择建议
选开发板,我建议别贪便宜。有些十几块的板子,电源纹波大、晶振不准,调驱动时你会怀疑人生。
4.2.1 STM32推荐开发板
- STM32F429I-DISC1:自带2.4寸LCD,到手就能跑LVGL。适合入门。
- STM32H743I-EVAL2:带LTDC和DSI接口,支持1080p屏幕。适合做产品原型。
- 正点原子/野火 F429 开发板:国内生态好,资料多,带屏幕套餐性价比高。
4.2.2 ESP32推荐开发板
- ESP32-S3-DevKitC-1:官方板,带PSRAM,适合LVGL开发。
- 合宙ESP32-S3 TFT:集成LCD和触摸,到手即用,价格不到50元。
- M5Stack Core2:带2寸屏、触摸、电池管理,适合做原型验证。
我的经验: 如果你刚开始学LVGL,别一上来就买高端板。先拿一块带屏的STM32F429开发板,把基础驱动跑通。等理解了显存管理、DMA传输这些概念后,再换到ESP32做无线项目。这样踩坑少,效率高。
4.3 IDE与工具链配置
工具链这块,我踩过不少坑。尤其是不同IDE对LVGL工程的支持程度不一样。
4.3.1 STM32开发环境
- STM32CubeIDE:官方免费IDE,集成了CubeMX配置工具。我推荐新手用这个。
- Keil MDK:老牌IDE,编译快,但收费。公司项目用得多。
- IAR EWARM:优化好,但价格贵。军工和汽车项目常见。
我个人习惯用STM32CubeIDE。原因很简单:CubeMX里配好时钟、GPIO、LTDC、DMA2D,直接生成代码,省去手动配置外设的麻烦。LVGL的移植文件直接丢进工程就行。
4.3.2 ESP32开发环境
- ESP-IDF:官方框架,命令行+VS Code插件。功能最全。
- Arduino IDE:简单,但性能受限。适合快速验证。
- PlatformIO:VS Code插件,支持ESP-IDF和Arduino双模式。我推荐这个。
嗯,这里要注意:ESP32的LVGL驱动,ESP-IDF里已经有现成的 esp_lcd 组件。你只需要在 menuconfig 里配好屏幕参数,然后调用 esp_lcd_panel_io_tx_color() 就能刷屏。比STM32省事不少。
4.3.3 工具链安装清单
| 工具 | 用途 | 下载地址 |
|---|---|---|
| STM32CubeIDE | STM32开发 | st.com |
| ESP-IDF | ESP32开发 | github.com/espressif |
| VS Code | 代码编辑 | code.visualstudio.com |
| Git | 版本管理 | git-scm.com |
| Putty / MobaXterm | 串口调试 | 官方下载 |
避坑指南: 我曾经在STM32CubeIDE里直接导入一个LVGL 8.3的工程,结果编译报错说 lv_conf.h 找不到。后来发现是CubeIDE的索引缓存没刷新。解决办法:Project -> C/C++ Index -> Rebuild。这个坑我至少浪费了2小时。
4.4 硬件连接图
硬件连接是显示驱动的基础。接错一根线,屏幕可能不亮,甚至烧坏IO口。
4.4.1 STM32 + 8080并口屏连接
这是最常见的方案。STM32用FMC接口模拟8080时序。
// 以STM32F429 + ILI9341 为例
// FMC 地址线 A18 用作 DCX (数据/命令选择)
// 数据线 D0-D15 接 LCD 的 DB0-DB15
LCD_RST -> PG0
LCD_DCX -> PG1 (FMC_A18)
LCD_CS -> PG2 (FMC_NE1)
LCD_WR -> PG3 (FMC_NWE)
LCD_RD -> PG4 (FMC_NOE)
LCD_DB0 -> PD0
LCD_DB1 -> PD1
... (D2-D15 依次连接)
LCD_DB15 -> PD15
4.4.2 ESP32 + SPI屏连接
ESP32的SPI接口驱动小尺寸屏非常方便。
// 以ESP32-S3 + ST7789 为例
// 使用 SPI2 主机接口
LCD_SCLK -> GPIO12
LCD_MOSI -> GPIO11
LCD_CS -> GPIO10
LCD_DC -> GPIO9
LCD_RST -> GPIO8
LCD_BL -> GPIO7 (背光控制,PWM)
连线小技巧: 我习惯在每根信号线上串联一个22Ω的电阻。尤其是SCLK和MOSI,能有效抑制信号反射。有一次客户反馈屏幕花屏,排查了半天,最后发现是SCLK线太长没加匹配电阻。加上22Ω后,问题解决。
4.5 本章知识结构图
下面这张图帮你理清本章的核心逻辑:从选型到连线,每一步都影响最终效果。
4.6 本章小结
这一章我们聊了MCU选型、开发板选择、IDE配置和硬件连接。说白了,就是为LVGL显示驱动搭好舞台。
我个人建议:如果你刚入门,先买一块STM32F429带屏的开发板,用STM32CubeIDE把基础工程跑起来。等熟悉了显存管理、DMA传输这些概念后,再尝试ESP32的无线方案。这样循序渐进,踩坑少,成就感也来得快。