LVGL8移植FATFS并适配到STM32F407

目前LVGL版本已经更新到8.3版本,FATFS也是在嵌入式领域常用的文件系统。网上许多在LVGL上移植FATFS的教程大都是基于LVGL7版本的,而且过程较为凌乱。本文旨在帮助大家了解在LVGL8上移植FATFS文件系统的过程。
两种库的适配很简单,说白了就是在一方的函数中调用另一方的函数。下面介绍如何将LVGL与FATFS的函数关联起来。
这里我认为大家已经下载了LVGL和FATFS的官方库,并且已经会单独使用LVGL和FATFS进行测试(本文只讲他们之间如何适配)。下面是下载链接:
LVGL: https://github.com/lvgl/lvgl
FATFS: http://elm-chan.org/fsw/ff/00index_e.html
使用LVGL的文件系统时,函数的调用关系为:LVGL调用FATFS,FATFS调用单片机底层SD卡或FLASH驱动函数。
在适配过程中,我们主要关注3个文件:LVGL中有两个:lv_fs.clv_fs_fatfs.c。FATFS中有1个:ff.c
lv_fs.c是提供给用户使用的函数,比如lv_fs_openlv_fs_closelv_fs_read等。
ff.c是FATFS文件系统对底层磁盘操作的函数。
lv_fs_fatfs.c是连接上面两部分的过度文件。
调用关系:
在这里插入图片描述
lv_fs.c文件中打开文件函数:
LVGL8移植FATFS并适配到STM32F407_第1张图片
可以看到,在函数内部实际上调用的是设备的打开文件回调函数。
此回调函数会在lv_fs_fatfs.c中注册。
lv_fs_fatfs.c
LVGL8移植FATFS并适配到STM32F407_第2张图片
LVGL8移植FATFS并适配到STM32F407_第3张图片
LVGL8移植FATFS并适配到STM32F407_第4张图片
到这里LVGL和FATFS之间的调用关系就十分的清晰明了了。
注意:文件中的lv_fs_fatfs_init函数,是在lv_extra.c中的函数lv_extra_init调用的。而lv_extra_initlv_init中被调用,所以用户就不需要自己调用上面的lv_fs_fatfs_init函数注册回调函数了。
LVGL8移植FATFS并适配到STM32F407_第5张图片
LVGL8移植FATFS并适配到STM32F407_第6张图片
同时注意也要在lv_conf.h中打开使用FATFS文件系统的宏开关。
在这里插入图片描述
这里的LV_FS_FATFS_LETTER是单个字符,正点原子把SD卡盘符设置为0,这里注意要写为‘0’,而不能写为‘0:’或者‘0/’,否则使用文件系统函数会报错。我就是这个问题卡了好久。
综上可知,在LVGL中使用FATFS文件系统,同时在单片机上使用,只需要下面几步:
1、在lv_conf.h中打开LV_USE_FS_FATFS宏开关同时设置磁盘的盘符。
2、在工程中添加FATFS文件系统移植文件。
3、在FATFS文件中的diskio.c中添加底层磁盘驱动函数。
LVGL8移植FATFS并适配到STM32F407_第7张图片

LVGL8移植FATFS并适配到STM32F407_第8张图片LVGL8移植FATFS并适配到STM32F407_第9张图片
到此,LVGL和FATFS的适配已经完成,下面进行测试。
首先进行SD卡初始化和文件系统挂载
LVGL8移植FATFS并适配到STM32F407_第10张图片
然后进行LVGL初始化,最主要的是lv_init函数,在此函数里面进行文件系统初始化。
LVGL8移植FATFS并适配到STM32F407_第11张图片
最后调用LVGL的文件系统函数进行测试:
LVGL8移植FATFS并适配到STM32F407_第12张图片
输出结果:
LVGL8移植FATFS并适配到STM32F407_第13张图片
可以看到,系统从SD卡中读取了8个字符,说明LVGL的文件系统函数可以正常使用。

你可能感兴趣的:(LVGL,stm32,单片机,arm)