3、搭建开发环境:安装VS Code、PlatformIO或Keil,配置编译器与调试器,创建第一个空白工程

好,咱们正式开始动手了。

这一章,说白了就是「磨刀」。刀磨快了,后面砍柴才不费劲。很多初学者一上来就急着写代码,结果环境没配好,编译报错一堆,心态直接崩了。我当年刚入行时也干过这种事,折腾了一整天,最后发现是编译器路径没设对……嗯,从那以后,我养成了一个习惯:先把环境捋顺了,再动键盘。

3.1 选择你的武器:VS Code + PlatformIO vs Keil

先说说工具链的选择。我个人习惯把开发环境分成两类:

  • 轻量级、跨平台、现代化:VS Code + PlatformIO。适合用ESP32、STM32(配合Arduino框架或STM32Cube)、树莓派Pico等。免费,插件生态丰富,Git集成方便。
  • 重量级、老牌、工业级:Keil MDK。适合用ARM Cortex-M系列(尤其是STM32),很多公司项目指定用这个。收费,但调试器支持非常成熟。

你可能会问:「我该选哪个?」

我的建议是:如果你是自己学习、做小项目、或者想快速验证LVGL效果,优先选VS Code + PlatformIO。为什么呢?因为Keil的许可证管理有点烦,而且它的编辑器体验……嗯,你懂的。但如果你在公司里做产品,或者需要用到ST-Link的高级调试功能,那Keil还是绕不开的。

核心结论:本课程以VS Code + PlatformIO为主,同时我也会给出Keil的配置要点。两条路都走通,你才算真正「会搭环境」。

3.2 安装VS Code与PlatformIO

这一步很简单,但有几个坑。我一个个说。

3.2.1 下载VS Code

去官网 code.visualstudio.com 下载对应系统的版本。注意:不要下载成「Insiders」版本,那个是预览版,不稳定。选「Stable」就行。

3.2.2 安装C/C++扩展

打开VS Code,左侧点扩展图标(或者按Ctrl+Shift+X),搜索「C/C++」,安装微软官方那个。这个扩展提供了语法高亮、智能提示、代码跳转等功能。

3.2.3 安装PlatformIO IDE

还是在扩展市场里,搜索「PlatformIO IDE」。注意,是那个有「PlatformIO」图标的,别装错了。安装过程会下载一些依赖,大概需要几分钟。你泡杯茶等着就行。

小技巧:安装完成后,重启VS Code。如果左下角出现了一个「蚂蚁」图标(PlatformIO的Logo),说明安装成功。

3.2.4 配置编译器与调试器

PlatformIO最方便的地方在于:它自动管理编译器、工具链和调试器。你不需要手动去下载ARM GCC、OpenOCD这些东西。它会根据你选择的开发板,自动下载对应的工具链。

举个例子:如果你用ESP32,PlatformIO会自动下载xtensa-esp32-elf-gcc。如果你用STM32F4,它会下载arm-none-eabi-gcc。是不是很省心?

但有一点要注意:调试器配置。如果你用ST-Link,需要在platformio.ini里加上一句:

upload_protocol = stlink
debug_tool = stlink

如果你用J-Link,就改成:

upload_protocol = jlink
debug_tool = jlink

我曾经在一个项目里,因为忘了指定debug_tool,结果调试器死活连不上。折腾了半小时才发现是默认配置用了「cmsis-dap」,而我的调试器是ST-Link……嗯,这种低级错误,犯过一次就记住了。

3.3 安装Keil MDK(备选方案)

如果你坚持用Keil,或者公司项目要求用,那咱们也走一遍流程。

3.3.1 下载与安装

去Keil官网(www.keil.com)下载MDK-Arm。注意:需要注册账号,而且有大小限制(比如32KB代码限制的免费版)。对于学习LVGL来说,32KB肯定不够,所以你需要一个许可证。要么买,要么……嗯,你懂的。

3.3.2 安装设备支持包

安装完MDK后,打开Pack Installer,找到你的芯片型号(比如STM32F407VG),点击Install。这一步是下载芯片的SVD文件、启动文件、外设驱动库等。

3.3.3 配置编译器

Keil默认使用ARMCC(ARM Compiler 5或6)。我个人建议用ARMCC 6,因为它基于Clang,编译速度更快,错误提示也更友好。在Project - Options for Target - Target选项卡里,可以切换编译器版本。

3.3.4 配置调试器

在Debug选项卡里,选择你的调试器(ST-Link、J-Link等),然后点击Settings,配置SWD或JTAG接口速度。一般SWD模式,速度选4MHz或8MHz就行。别选太高,否则可能不稳定。

注意:Keil的调试器配置里,有一个「Reset and Run」选项。勾上它,下载完程序后芯片会自动复位运行。如果不勾,你得手动按复位键。我刚开始用Keil时,每次下载完都要按一下复位,后来才发现有这个选项……

3.4 创建第一个空白工程

环境搭好了,咱们来创建一个空白工程。这一步的目的是验证工具链是否正常工作。

3.4.1 使用PlatformIO创建

打开VS Code,点击左侧的「蚂蚁」图标,进入PlatformIO主页。点击「New Project」,然后:

  1. 输入项目名称,比如「lvgl_demo」。
  2. 选择开发板。比如「Espressif ESP32 Dev Module」或「STMicroelectronics STM32F4VE」。
  3. 选择框架。如果是ESP32,选「Arduino」或「ESP-IDF」;如果是STM32,选「STM32Cube」或「Arduino」。
  4. 点击「Finish」,PlatformIO会自动生成项目结构,并下载工具链。

生成完成后,你会看到这样的目录结构:

lvgl_demo/
├── .pio/          # 工具链和依赖(自动生成,不用管)
├── include/       # 头文件
├── lib/           # 库文件
├── src/           # 源代码
│   └── main.cpp   # 主文件
├── test/          # 测试文件
├── platformio.ini # 项目配置文件
└── README.md

打开src/main.cpp,写一个最简单的程序:

#include <Arduino.h>

void setup() {
  Serial.begin(115200);
  Serial.println("Hello, LVGL World!");
}

void loop() {
  delay(1000);
}

然后点击左下角的「→」箭头(Build and Upload),或者按Ctrl+Alt+U。如果一切顺利,你会看到编译成功,然后程序被烧录到开发板上。打开串口监视器(PlatformIO自带),应该能看到「Hello, LVGL World!」每隔一秒打印一次。

小提示:如果编译报错,先检查platformio.ini里的board配置是否正确。我曾经把ESP32选成了ESP8266,结果编译了一堆莫名其妙的错误……

3.4.2 使用Keil创建

打开Keil MDK,点击Project - New uVision Project,选择芯片型号,然后:

  1. 在Manage Run-Time Environment里,勾选必要的组件(比如CMSIS Core、Device Startup等)。
  2. 添加一个main.c文件,写一个空循环:
int main(void) {
    while(1) {
        // 空循环
    }
}

点击Build(F7),如果0 Error 0 Warning,说明环境配置成功。然后点击Download(F8),烧录到开发板。

3.5 验证工具链:编译与调试

空白工程创建成功后,咱们来验证一下调试器是否正常工作。

3.5.1 PlatformIO调试

在platformio.ini里加上:

debug_tool = stlink
debug_init_break = tbreak setup

然后点击左侧的「Debug」图标(或者按Ctrl+Shift+D),选择「PlatformIO Debugger」,点击绿色三角开始调试。你应该能看到程序停在setup()函数的第一行。可以单步执行、查看变量、设置断点。

3.5.2 Keil调试

点击Debug - Start/Stop Debug Session(Ctrl+F5)。如果调试器连接成功,你会看到代码停在main()函数的第一行。可以按F10单步,F11进入函数,F5全速运行。

重要:如果调试器连接失败,先检查硬件连接:SWDIO、SWCLK、GND三根线必须接好。如果是ST-Link,还要注意VCC要不要接(有些板子需要外部供电)。我遇到过好几次,都是因为杜邦线接触不良导致调试失败……

3.6 避坑指南

最后,分享几个我踩过的坑:

  • 路径不能有中文:VS Code和Keil对中文路径支持都不好。项目文件夹、用户名、桌面路径,都不要出现中文。我曾经把项目放在「桌面/项目」里,结果编译报错找不到头文件……
  • 防火墙拦截:PlatformIO第一次下载工具链时,需要联网。如果下载失败,检查防火墙是否拦截了PlatformIO的进程。可以尝试关闭防火墙,或者设置代理。
  • Keil许可证过期:Keil的许可证有有效期。如果突然编译报错「License Error」,去官网重新激活一下就行。
  • 调试器固件版本:ST-Link的固件需要更新到最新版。用STM32CubeProgrammer可以一键更新。我有一块老旧的ST-Link V2,固件太旧,连不上STM32F7,更新后就正常了。

好了,环境搭好了,空白工程也跑起来了。下一章,咱们开始真正接触LVGL——把图形库移植到你的开发板上,点亮第一块屏幕。


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