里飞网

标题: littleVGL外置中文字库教程 [打印本页]

作者: liyunfei1990    时间: 2020-6-15 19:13
标题: littleVGL外置中文字库教程
本帖最后由 liyunfei1990 于 2020-6-15 19:19 编辑

littleVGL外置中文字库教程
       2020年6月15日,在《里飞网站长的指导下,完成了在STM32F103平台加入中文全字库的移值。使用SPI接口,W25Q128储存字库的bin文件,从SD卡路径下升级字库到W25Q128,在调用字体时,再读取字体所在W25Q128的地址,从而显示中文汉字,其中,中文字库里在生成时也加入了数字和字母,生成的全字库,使用的站长发布的字库转换软件,LvglFontToolV0.3这是下载地址,以下是图文教程。
先看中文显示效果: (, 下载次数: 1836) 第一步:使用软件制作字库的bin文件,我是用来3种大小的楷体字。
(, 下载次数: 1803)
软件帮助里有个.c文件转换UTF8,须注意以下。下面是生成的字库
(, 下载次数: 1857)
(, 下载次数: 1700)
第二步:字库.c文件加入移值好的littleVGL工程
(, 下载次数: 1790)
加入后改下头文件
(, 下载次数: 1733)
再把3个字库.c文件里的变量和SPI读取函数加上3个文件的方法都一样
(, 下载次数: 1795)
然后在.h里声明一下全局字库
(, 下载次数: 1787)
在fontupd.c里修改字库在SD卡里的路径和升级字库函数,这里可以参考正点原子的例程,稍后我也会压缩下放到帖子里作为参考。
(, 下载次数: 1776)
在再STM32里升级字库到W25Q128里,这个过程可看考原子的。
第三步:在littleVGL引用自定义的中文字库,已经声明了。先添加字体样式在使用
(, 下载次数: 1799) (, 下载次数: 1715) 教程中用到的源码文件 (, 下载次数: 3040)
其中,中文《里飞网》汉字3个KEIL 报错说是缺少右引号,需将网字后面空一格或写成4个汉字,就不报错,截止作者发帖时未找到原因,各位坛友如知道
原因可留言,至此移值结束。因知识有限,教程中难免有一些错误之处,敬请谅解,有问题可以留言。作者QQ:649644359 可以互相学习交流单片机经验,此致敬礼!


作者: 阿里兄    时间: 2020-6-15 21:57
非常感谢楼主分享。
作者: wucq    时间: 2020-11-30 14:51
楼主,您好。我现在有个项目需要字库,我看您这个帖子是通过程序把bin文件写入flash的,同时把bin文件的信息也写在前面,但是量产的情况,应该是通过工具给flash写bin文件吧  那这个时候改怎么弄呢

作者: 阿里兄    时间: 2020-11-30 16:28
wucq 发表于 2020-11-30 14:51
楼主,您好。我现在有个项目需要字库,我看您这个帖子是通过程序把bin文件写入flash的,同时把bin文件的信 ...

一般准备好一个SPI FLASH芯片做为样本,其它的FLASH就使用工具复制样本芯片就好了。
作者: 阿里兄    时间: 2020-11-30 16:30
wucq 发表于 2020-11-30 14:51
楼主,您好。我现在有个项目需要字库,我看您这个帖子是通过程序把bin文件写入flash的,同时把bin文件的信 ...

或是把样本的FLASH内容读出来,使用烧录工具烧录到其它芯片。
作者: wucq    时间: 2020-12-1 10:23
阿里兄 发表于 2020-11-30 16:30
或是把样本的FLASH内容读出来,使用烧录工具烧录到其它芯片。

您的意思是用楼主的方式把bin文件写到flash里面然后在通过烧录工具读出来再写到其他的flash里面?
作者: 阿里兄    时间: 2020-12-1 15:43
wucq 发表于 2020-12-1 10:23
您的意思是用楼主的方式把bin文件写到flash里面然后在通过烧录工具读出来再写到其他的flash里面? ...

有FLASH烧写工具卖的啊,可以直接把bin文件烧录到指定的地址。
作者: Pupil    时间: 2020-12-9 15:16
版主在吗,现在lvgl增加了动态字体调用,这个转换后的BIN和官方的LV_FONT_CONV一样吗,能一样用吗
作者: 阿里兄    时间: 2020-12-9 17:37
Pupil 发表于 2020-12-9 15:16
版主在吗,现在lvgl增加了动态字体调用,这个转换后的BIN和官方的LV_FONT_CONV一样吗,能一样用吗 ...

生成字体后,对于单个字体是独立的,都可以使用,工具是我用QT自己写的,没有用到官方的东西。
作者: Pupil    时间: 2020-12-9 18:09
好的,现在升级到7.8了,我试试能用吗
作者: Pupil    时间: 2020-12-9 18:51
可以用,已经可以显示了,多谢版主提供好工具使用
作者: Pupil    时间: 2020-12-9 19:09
软件部分文件显示不出来,放大后仍显示不出来,希望可以改进 (, 下载次数: 1698)

作者: LY3T    时间: 2020-12-29 03:06
楼主你好,很感谢你的分享,我最近也在搞lvgl的字库,我按照你的教程做了一遍,但是最后什么也没有显示,请问是什么回事?是我烧写bin文件出错还是修改代码出错了?请问可以发完整的代码工程参考一下吗?我用的也是正点原子的战舰板,应该适配楼主的代码,谢谢楼主,感谢楼主
作者: 阿里兄    时间: 2020-12-29 08:50
Pupil 发表于 2020-12-9 19:09
软件部分文件显示不出来,放大后仍显示不出来,希望可以改进

你的应该是WIN10系统,然后你设置了字体放大吧,桌面右键可以修改字体放大的。
作者: 阿里兄    时间: 2020-12-29 08:53
LY3T 发表于 2020-12-29 03:06
楼主你好,很感谢你的分享,我最近也在搞lvgl的字库,我按照你的教程做了一遍,但是最后什么也没有显示,请 ...

你这半夜还在搞,也是够拼的。你先测试内部字体能不能显示,如果内部字体能显示了,说明你外部读取有问题,你把bin文件转成数组文件直接加入工程测试一下,看看正常不。
作者: wucq    时间: 2020-12-29 17:46
楼主你好,我这边内部字体中文显示不了。不知道是怎么回事。
void lv_test_cont_1(void)
{
    /* Create a default object*/
    lv_obj_t * cont1 = lv_cont_create(lv_disp_get_scr_act(NULL), NULL);
    lv_obj_set_pos(cont1, 10, 10);
    lv_cont_set_style(cont1, LV_CONT_STYLE_MAIN, &lv_style_pretty);
    lv_obj_t * obj2_1 = lv_label_create(cont1, NULL);
    lv_label_set_text(obj2_1, "abc你!");
}
我是直接把默认字体改成了我加进去的字体。
作者: 阿里兄    时间: 2020-12-29 17:49
wucq 发表于 2020-12-29 17:46
楼主你好,我这边内部字体中文显示不了。不知道是怎么回事。
void lv_test_cont_1(void)
{

你C文件没有使用UTF8编码,这个C文件用记事本打开,另存为,选择UTF8编码
作者: wucq    时间: 2020-12-29 18:00
阿里兄 发表于 2020-12-29 17:49
你C文件没有使用UTF8编码,这个C文件用记事本打开,另存为,选择UTF8编码

有的。然后我打开字体文件 “你”这个字在文件里面的索引好像是0x4f60  这个好像是Unicode的编码。
作者: 阿里兄    时间: 2020-12-29 18:01
wucq 发表于 2020-12-29 18:00
有的。然后我打开字体文件 “你”这个字在文件里面的索引好像是0x4f60  这个好像是Unicode的编码。 ...

不是字库文件,而是说你使用文字所在的源码文件,lv_label_set_text(obj2_1, "abc你!");这句话所在的文件需要UTF8编码。
作者: sinotyk    时间: 2021-2-25 10:37
使用0.3产生字库,将bin文件通过B2C软件转换为c数组,加入工程,参考安富莱的例子,keil里面直接烧写字库到flash,不需要用sd卡作为中介。
作者: 阿里兄    时间: 2021-2-25 10:42
sinotyk 发表于 2021-2-25 10:37
使用0.3产生字库,将bin文件通过B2C软件转换为c数组,加入工程,参考安富莱的例子,keil里面直接烧写字库到 ...

这也是一种方式,SD卡也是一种方式,根据需求使用使用环境选择合适的方式就行




欢迎光临 里飞网 (http://dz.lfly.xyz/) Powered by Discuz! X3.3