Pico 系列
零基础也能照做
完整移植流程,目标是:
- 在树莓派 Pico(RP2040)上用 pico-sdk + LVGL 9.0.0
- ST7796 320×480 SPI 屏显示官方 Demo(stress、widgets 等)
- 不需要操作系统,纯 C 工程
整套流程分 6 步,跟着做即可:
1. 准备环境
1.1 安装 pico-sdk(官方推荐方式)
# 假设工作目录 ~/pico
cd ~
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
export PICO_SDK_PATH=$PWD # 以后编译要用
1.2 安装编译工具
sudo apt update
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
2. 拉取 LVGL 9.0.0 源码
cd ~/pico
git clone -b v9.0.0 https://github.com/lvgl/lvgl.git
精简(可选):
只保留 src
、examples/porting
、lv_conf_template.h
即可,其余删除。
3. 生成最小工程骨架
3.1 新建工程目录
cd ~/pico
mkdir lvgl_pico && cd lvgl_pico
3.2 复制并改名配置模板
cp ../lvgl/lv_conf_template.h lv_conf.h
cp ../lvgl/examples/porting/lv_port_disp_template.c lv_port_disp.c
cp ../lvgl/examples/porting/lv_port_disp_template.h lv_port_disp.h
# 如果以后用触摸再复制 indev 模板
3.3 修改 lv_conf.h
把开头的 #if 0
改成 #if 1
使能整份配置。
关键选项打开:
#define LV_COLOR_DEPTH 16 /* 与 ST7796 RGB565 对应 */
#define LV_COLOR_16_SWAP 0 /* 如屏幕颜色异常可改 1 */
#define LV_USE_DEMO_STRESS 1 /* 运行 stress demo */
其余保持默认即可。
4. 把驱动文件放进工程
4.1 把你已准备好的 lv_port_disp.c / .h
复制进来,覆盖刚才生成的模板。
(你给出的文件已经适配 ST7796 + SPI,直接可用)
4.2 创建 CMakeLists.txt(工程描述)
cmake_minimum_required(VERSION 3.13)
include($ENV{PICO_SDK_PATH}/pico_sdk_init.cmake)
project(lvgl_pico C CXX ASM)
pico_sdk_init()
# 源文件
file(GLOB LVGL_SRC
lvgl/src/*.c
lvgl/src/draw/*.c
lvgl/src/core/*.c
lvgl/src/hal/*.c
lvgl/src/misc/*.c
lvgl/src/widgets/*.c
lvgl/src/layouts/*.c
lvgl/src/themes/*.c
lvgl/src/font/*.c
)
add_executable(lvgl_demo
main.c
lv_port_disp.c
${LVGL_SRC}
)
# 头文件路径
target_include_directories(lvgl_demo PRIVATE
.
lvgl
)
# 链接库
target_link_libraries(lvgl_demo
pico_stdlib
hardware_spi
hardware_gpio
)
# 生成 uf2 / bin
pico_add_extra_outputs(lvgl_demo)
5. 编写 main.c
#include "pico/stdlib.h"
#include "lvgl/lvgl.h"
#include "lv_port_disp.h"
int main(void)
{
stdio_init_all();
lv_init(); // 1. 初始化 lvgl 本体
lv_port_disp_init(); // 2. 注册显示屏
/* 3. 运行官方 demo(lv_conf.h 里已使能) */
lv_demo_stress(); // 你也可以换成 lv_demo_widgets() 等
/* 4. 主循环:给 lvgl 喂时基 + 任务调度 */
while (true) {
lv_timer_handler(); // 处理所有 lvgl 任务
lv_tick_inc(5); // 告诉 lvgl 过去了 5 毫秒
sleep_ms(5); // 简单延时
}
return 0;
}
6. 编译 & 烧录
cd ~/pico/lvgl_pico
mkdir build && cd build
cmake .. -DPICO_BOARD=pico
make -j4
生成的 lvgl_demo.uf2
拖到 Pico 的 BOOTSEL 盘即可运行。
常见问题速查
- 屏幕花屏/颜色反色 → 把
lv_conf.h
里的LV_COLOR_16_SWAP
取反试试 - 触摸要加 → 用
lv_port_indev_template.c
模板,把 SPI/I2C 触摸 IC 驱动填进去即可 - 内存不够 → 把
lv_port_disp.c
中的缓冲区改小,例如buf_1[MY_DISP_HOR_RES * 8]
- 编译提示找不到头文件 → 确认
CMakeLists.txt
的target_include_directories
路径正确
一句话总结
把 LVGL 9 源码、你自己写好的 ST7796 驱动、官方示例整合进一个最小 pico-sdk 工程,编译后烧录即可跑 Demo,以上 6 步照抄即可。