你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

KEIL&Stm32 LVGL文件系统移植配置-总结

[复制链接]
STMCU小助手 发布时间:2022-8-27 19:04
1.文件系统移植准备
    直接根据上几个章节移植的文件直接修改FATFS配置到LVGL文件系统。

    准备一张图片,尺寸不要超过屏幕大小。

U6Z~4TU]XB680MR16LR@XVV.png

使用lvgl_image_convert软件将dog.png转换为dog.bin文件,并将dog.bin复制到SD卡根目录下。

输出格式为Bin_565

UN]K8(5XV}62T58)[@%)@GV.png

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);。这里的记录就直接附截图了,还是自己手动配置一下记忆更深。

$T@G)H{%HAT}6V@ISSVI2MI.png

B03WG8P6QTHSCXTU@VY~_IO.png

0ZF}43V{{IU2`8BDRL@4NEN.png


3.文件系统测试
    在上一章节记录的基础上面将按钮控件,替换称为一个带图片背景色的按钮。

    先在初始化函数中初始化LVGL文件系统

1%XZ][IQ0HH1(YOF{~[%WAQ.png

main函数修改

QGW9U7T[Z9]8606V992Q[CA.png

实际效果。

{V3E)$V_S8CNK9(Y~C_S~{2.png

4.LVGL模拟器加载本地图片
    打开建立的LVGL模拟器启动文件

UPAP6_[2Z]O3P8OXF2Z5{1X.png

修改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*/

8{RM$~Q{X3CLFB_2]IU}YP1.png

修改lv_conf_internal.h

先在KEIL_LVGL\Simulator\LVGL.Simulator文件夹下面新建image文件夹并把dogmax.bin复制到里面。

7I8D988P@(_`$O2C__VOXM1.png

修改 #define LV_FS_WIN32_LETTER '0' // 卷标

#define LV_FS_WIN32_PATH "image/"  // 文件相对路径

  #define LV_FS_WIN32_CACHE_SIZE 4*512 // 读取文件缓存大小

11CJA[1K)Y]M4IG8$TV4VZ5.png

在main函数中添加以下函数并运行。这里面的main函数内容其实与KEIL中的main函数差不多。

P$$I@((2Q9`8I]B6V1_YVX9.png

运行效果。

PGWPYM1@M7YME)$)R%A[RJU.png

5.总结

        到这里差不多是把LVGL驱动配置完成了,我在移植配置KEIL工程和VS LVGL模拟器时可以看到两个工程引用的的lv_conf.h文件其实不是一个文件,在配置两个文件的路径时要重点注意。

        在运行编译运行LVGL模拟器时,有时候模拟器并不会报错,但是会报错LVGL.Simulator.exe无法运行,这个时候需要将KEIL_LVGL\Simulator\Output\Binaries\Debug\x64文件夹下面的两个文件删除掉就行。这个问题暂时还没有发现是在哪里引入的BUG。

$IHCL)0(CKD{I%RK83641ZS.png

        这个移植是一学习记录的过程,自己踩过的坑不想再重复一次,也给大家一个参考,免的浪费时间自己摸索。

        KEIL工程和visual studio模拟器工程其实可以通过合理的创建公共文件,实现模拟器调试后可以直接在keil中编译下载,这个在后面再谈论一下。

        为避免大家在我这里浪费时间,我这里先讲一下我会记录一下什么。

        首先的像按钮、列表、线条之类的单个控件的运用我这里是不会记录的,像LVGL官网、百问网等网站上面有好多高质量的介绍,我是肯定没那些大佬讲解的仔细的,我这里就直接用了,大家有需要的可以直接去那些网站学习。

        主要是记录一些控件的组合使用,大多是搭配具体的工程,还有就是一些比较晦涩的运用、调试过程遇到的一些坑。近期会学习记录页面管理器,页面之间的联动之类的运用,后期会做一个开发板专门用来学习LVGL,大家如果感觉今后会用得到的话,不妨先三连支持一下。

作者:鹰头猫咪喵喵鱼

1 收藏 1 评论0 发布时间:2022-8-27 19:04

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版