1.lv_fs_fatfs.c
LVGL8自带的lv_fs_fatfs.c已经集成了fatfs的驱动层封装,不需要额外移值fatfs接口函数,只要在初始化时调用f_mount()挂载SD成功后,lvgl相关的lv_fatfs操作函数如lv_fs_open()\lv_fs_read()等即可直接使用。
2.lv_conf.h
#define LV_USE_FS_FATFS 1
#define LV_FS_FATFS_LETTER '0' 盘符‘0’、‘S'或其他都可以,操作lv_fs_open()\lv_fs_read()等函数使用此盘符即可。
3.ffconf.h (关键配置)
#define _CODE_PAGE 936
#define _USE_LFN 2
#define _MAX_LFN 255
#define _LFN_UNICODE 0
#define _STRF_ENCODE 3
4.字体制作
字体制作软件下载:LittlevGL - 里飞网 - Powered by Discuz! (lfly.xyz)LvglFontTool(建议V0.4)字体制作软件下载:LittlevGL - 里飞网 - Powered by Discuz! (lfly.xyz)
两种方法,第一种是使用内置字体:(区别就是勾不勾选FreeType选项)
第二种方法:自由字体
截图示例的字体大小是12,不过12太过于小了看不清,建议16或24,
这里命名时是自定义的,但建议带上字体大小方便管理。
参考链接:LVGL8.2 之 模拟器使用外部中文字体,两种方式_lvgl字库外置-优快云博客
同理,做了几种大小的字体如下:
复制.bin文件到SD卡,放在SD卡根目录或文件夹下都可以,我个人习惯是放在Font文件夹下。到这步就完成了字体的制作。
5.字体的调用
将对应的.c文件复制到单片机工程并添加到工程中,
打开.c文件,添加FatFs从SD卡读取Bin文件的操作驱动,可以看到,__user_font_getdata()函数是空的,需要人工去手动添加具体实现函数,它也温馨地提示了SPI_Flash和SDRAM的驱动方式,很遗憾它没有Fatfs的读取驱动方式的提示,所以手动添加,不过我遇到的坑就是在这一步。
从优快云上找到的有2篇文章提及这里的驱动,一篇是ESP32开发学习 LVGL Littlevgl 加载外部SD卡字库显示_esp32 lvgl读取字体-优快云博客
上面这篇截图如下,使用的是打开一次文件后不关闭处理。实测是不能正常显示文字的(在我的板子是这样的,不知道原作者的能不能正常显示)
另一篇是LVGL8.2 之 模拟器使用外部中文字体,两种方式_lvgl字库外置-优快云博客
由于我的字体在SD卡的路径是Font文件夹下,所以改成如下
主任务中初始化和调用LVGL和触摸,并将此带中文字符串显示内容的c文件用记事本改为UTF-8编码(只需改一次)。
改为UTF-8后再编译工程即可。
这个驱动在我板子上就能正常显示中文。