
1.文件系统移植准备 直接根据上几个章节移植的文件直接修改FATFS配置到LVGL文件系统。 准备一张图片,尺寸不要超过屏幕大小。 ![]() 使用lvgl_image_convert软件将dog.png转换为dog.bin文件,并将dog.bin复制到SD卡根目录下。 输出格式为Bin_565 ![]() 2.KEIL&LVGL文件系统配置 修改lv_conf.h文件 #define LV_USE_FS_FATFS 1 #if LV_USE_FS_FATFS #define LV_FS_FATFS_LETTER '0' // 卷标 #define LV_FS_FATFS_CACHE_SIZE 2*512 // 读取大小 #endif 打开并使能lv_port_fs.c、lv_port_fs.h, lv_port_fs.c只需要修改一下几个函数就行,其他的暂时注释掉,以后若有需要在进行修改。我们这里就先实现图片的加载 static void fs_init(void); static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode); static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p); static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br); static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw); static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence); static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p); static void * fs_dir_open(lv_fs_drv_t * drv, const char * path); static lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * dir_p, char * fn); static lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * dir_p); 下面的几个函数按顺序进行修改,先修改初始化函数void fs_init(void);。这里的记录就直接附截图了,还是自己手动配置一下记忆更深。 ![]() ![]() ![]() 3.文件系统测试 在上一章节记录的基础上面将按钮控件,替换称为一个带图片背景色的按钮。 先在初始化函数中初始化LVGL文件系统 ![]() main函数修改 ![]() 实际效果。 ![]() 4.LVGL模拟器加载本地图片 打开建立的LVGL模拟器启动文件 ![]() 修改lv_conf.h中 在这里一定要把LV_COLOR_DEPTH定义为16,在前面我们转换的图片输出格式是Bin_565,按默认的LV_COLOR_DEPTH定义为32,是显示不出来图片的。 定义FS卷标为0跟KEIL中的一样,可以方便程序移植。 #define LV_USE_FS_WIN32 '0' /*Uses CreateFile, ReadFile, etc*/ ![]() 修改lv_conf_internal.h 先在KEIL_LVGL\Simulator\LVGL.Simulator文件夹下面新建image文件夹并把dogmax.bin复制到里面。 ![]() 修改 #define LV_FS_WIN32_LETTER '0' // 卷标 #define LV_FS_WIN32_PATH "image/" // 文件相对路径 #define LV_FS_WIN32_CACHE_SIZE 4*512 // 读取文件缓存大小 ![]() 在main函数中添加以下函数并运行。这里面的main函数内容其实与KEIL中的main函数差不多。 ![]() 运行效果。 ![]() 5.总结 到这里差不多是把LVGL驱动配置完成了,我在移植配置KEIL工程和VS LVGL模拟器时可以看到两个工程引用的的lv_conf.h文件其实不是一个文件,在配置两个文件的路径时要重点注意。 在运行编译运行LVGL模拟器时,有时候模拟器并不会报错,但是会报错LVGL.Simulator.exe无法运行,这个时候需要将KEIL_LVGL\Simulator\Output\Binaries\Debug\x64文件夹下面的两个文件删除掉就行。这个问题暂时还没有发现是在哪里引入的BUG。 ![]() 这个移植是一学习记录的过程,自己踩过的坑不想再重复一次,也给大家一个参考,免的浪费时间自己摸索。 KEIL工程和visual studio模拟器工程其实可以通过合理的创建公共文件,实现模拟器调试后可以直接在keil中编译下载,这个在后面再谈论一下。 为避免大家在我这里浪费时间,我这里先讲一下我会记录一下什么。 首先的像按钮、列表、线条之类的单个控件的运用我这里是不会记录的,像LVGL官网、百问网等网站上面有好多高质量的介绍,我是肯定没那些大佬讲解的仔细的,我这里就直接用了,大家有需要的可以直接去那些网站学习。 主要是记录一些控件的组合使用,大多是搭配具体的工程,还有就是一些比较晦涩的运用、调试过程遇到的一些坑。近期会学习记录页面管理器,页面之间的联动之类的运用,后期会做一个开发板专门用来学习LVGL,大家如果感觉今后会用得到的话,不妨先三连支持一下。 作者:鹰头猫咪喵喵鱼 |
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南