在 RT-Thread 中使用 LVGL 显示 SD 卡内容,需要手动配置文件系统和 LVGL 的文件接口。以下是详细步骤:
挂载 SD 卡
在 rt_hw_board_init() 或应用代码中初始化 SD 卡并挂载文件系统(如 FATFS):
#include
int sd_mount(void) {
if (dfs_mount("sd0", "/", "elm", 0, 0) == 0) {
rt_kprintf("SD card mounted to /n");
} else {
rt_kprintf("SD card mount failedn");
}
}
INIT_APP_EXPORT(sd_mount); // 自动初始化sd0)与你的板卡一致(查看 SD 卡驱动注册的设备名)。测试文件系统
在终端使用命令检查 SD 卡内容:
ls / # 查看根目录
cat /test.txt # 测试读取文件启用 LVGL 文件系统支持
在 rtconfig.h 或通过 ENV 工具 (menuconfig) 配置:
# 进入 RT-Thread ENV 配置
menuconfigRT-Thread Components → GUI → LVGL → [*] Enable file system'S'):(S) LV_FS_FATFS_LETTER # 驱动器字母(自定义)修改 LVGL 文件系统驱动
编辑 lv_conf.h:
#define LV_USE_FS_FATFS 1
#define LV_FS_FATFS_LETTER 'S' // 与 menuconfig 中一致实现文件操作接口
在工程中添加 lv_port_fs.c(参考模板:packages/lvgl/port/lv_port_fs.c)。关键函数:
void lv_port_fs_init(void) {
lv_fs_drv_t fs_drv;
lv_fs_drv_init(&fs_drv);
fs_drv.letter = LV_FS_FATFS_LETTER;
fs_drv.open_cb = fs_open;
fs_drv.close_cb = fs_close;
fs_drv.read_cb = fs_read;
// ... 其他回调(write, seek 等)
lv_fs_drv_register(&fs_drv);
}open、read)。初始化 LVGL 文件系统
在 LVGL 初始化后调用:
extern void lv_port_fs_init(void); // 声明
int lvgl_init(void) {
lv_init();
lv_port_fs_init(); // 初始化文件系统接口
// ... 其他初始化(显示驱动、输入设备等)
}加载并显示图片
lv_obj_t *img = lv_img_create(lv_scr_act());
lv_img_set_src(img, "S:/images/pic.jpg"); // 路径格式: "驱动器字母:/路径"
lv_obj_center(img);list_device 查看是否有 sd0 设备。"S:/path/to/file"(注意斜杠方向和冒号)。open、read、seek 等)。LV_USE_PNG 或 LV_USE_SJPG)。lv_conf.h 增加 LV_MEM_SIZE)。lv_port_fs.c 核心回调示例:#include
#include // RT-Thread 文件系统头文件
static void *fs_open(lv_fs_drv_t *drv, const char *path, lv_fs_mode_t mode) {
int fd = open(path, O_RDONLY);
return (void *)(intptr_t)fd;
}
static lv_fs_res_t fs_read(lv_fs_drv_t *drv, void *file_p, void *buf, uint32_t btr, uint32_t *br) {
int fd = (int)(intptr_t)file_p;
*br = read(fd, buf, btr);
return (*br > 0) ? LV_FS_RES_OK : LV_FS_RES_UNKNOWN;
}
// 实现其他回调: close、seek 等... | 步骤 | 内容 |
|---|---|
| 1. 挂载 SD 卡 | 使用 dfs_mount 挂载 FATFS 到路径(如 /) |
| 2. 配置 LVGL | 启用 LV_USE_FS_FATFS 并设置驱动器字母 |
| 3. 实现接口 | 添加 lv_port_fs.c 并注册文件操作回调 |
| 4. 使用路径 | 加载文件时使用 "X:/path" 格式(X 为驱动器字母) |
通过以上步骤,你的 HMI-Board 即可通过 LVGL 显示 SD 卡中的图片、文本等内容。
举报
更多回帖