【踩坑记录】LVGL8通过FatFs调用外部SD卡XBF字体显示中文

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后再编译工程即可。

这个驱动在我板子上就能正常显示中文。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值