里飞网

 找回密码
 立即注册
查看: 13574|回复: 20
打印 上一主题 下一主题

littleVGL外置中文字库教程

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2020-6-15 19:13:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liyunfei1990 于 2020-6-15 19:19 编辑

littleVGL外置中文字库教程
       2020年6月15日,在《里飞网站长的指导下,完成了在STM32F103平台加入中文全字库的移值。使用SPI接口,W25Q128储存字库的bin文件,从SD卡路径下升级字库到W25Q128,在调用字体时,再读取字体所在W25Q128的地址,从而显示中文汉字,其中,中文字库里在生成时也加入了数字和字母,生成的全字库,使用的站长发布的字库转换软件,LvglFontToolV0.3这是下载地址,以下是图文教程。
先看中文显示效果: 第一步:使用软件制作字库的bin文件,我是用来3种大小的楷体字。

软件帮助里有个.c文件转换UTF8,须注意以下。下面是生成的字库


第二步:字库.c文件加入移值好的littleVGL工程

加入后改下头文件

再把3个字库.c文件里的变量和SPI读取函数加上3个文件的方法都一样

然后在.h里声明一下全局字库

在fontupd.c里修改字库在SD卡里的路径和升级字库函数,这里可以参考正点原子的例程,稍后我也会压缩下放到帖子里作为参考。

在再STM32里升级字库到W25Q128里,这个过程可看考原子的。
第三步:在littleVGL引用自定义的中文字库,已经声明了。先添加字体样式在使用
教程中用到的源码文件 littleVGL移值中文字库教程中用到的文件.rar (1.97 MB, 下载次数: 3042)
其中,中文《里飞网》汉字3个KEIL 报错说是缺少右引号,需将网字后面空一格或写成4个汉字,就不报错,截止作者发帖时未找到原因,各位坛友如知道
原因可留言,至此移值结束。因知识有限,教程中难免有一些错误之处,敬请谅解,有问题可以留言。作者QQ:649644359 可以互相学习交流单片机经验,此致敬礼!

回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
沙发
发表于 2020-6-15 21:57:58 | 只看该作者
非常感谢楼主分享。
回复

使用道具 举报

0

主题

7

帖子

26

积分

新手上路

Rank: 1

积分
26
板凳
发表于 2020-11-30 14:51:12 | 只看该作者
楼主,您好。我现在有个项目需要字库,我看您这个帖子是通过程序把bin文件写入flash的,同时把bin文件的信息也写在前面,但是量产的情况,应该是通过工具给flash写bin文件吧  那这个时候改怎么弄呢
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

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

一般准备好一个SPI FLASH芯片做为样本,其它的FLASH就使用工具复制样本芯片就好了。
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
5#
发表于 2020-11-30 16:30:37 | 只看该作者
wucq 发表于 2020-11-30 14:51
楼主,您好。我现在有个项目需要字库,我看您这个帖子是通过程序把bin文件写入flash的,同时把bin文件的信 ...

或是把样本的FLASH内容读出来,使用烧录工具烧录到其它芯片。
回复

使用道具 举报

0

主题

7

帖子

26

积分

新手上路

Rank: 1

积分
26
6#
发表于 2020-12-1 10:23:09 | 只看该作者
阿里兄 发表于 2020-11-30 16:30
或是把样本的FLASH内容读出来,使用烧录工具烧录到其它芯片。

您的意思是用楼主的方式把bin文件写到flash里面然后在通过烧录工具读出来再写到其他的flash里面?
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
7#
发表于 2020-12-1 15:43:27 | 只看该作者
wucq 发表于 2020-12-1 10:23
您的意思是用楼主的方式把bin文件写到flash里面然后在通过烧录工具读出来再写到其他的flash里面? ...

有FLASH烧写工具卖的啊,可以直接把bin文件烧录到指定的地址。
回复

使用道具 举报

0

主题

6

帖子

16

积分

新手上路

Rank: 1

积分
16
8#
发表于 2020-12-9 15:16:50 | 只看该作者
版主在吗,现在lvgl增加了动态字体调用,这个转换后的BIN和官方的LV_FONT_CONV一样吗,能一样用吗
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
9#
发表于 2020-12-9 17:37:12 | 只看该作者
Pupil 发表于 2020-12-9 15:16
版主在吗,现在lvgl增加了动态字体调用,这个转换后的BIN和官方的LV_FONT_CONV一样吗,能一样用吗 ...

生成字体后,对于单个字体是独立的,都可以使用,工具是我用QT自己写的,没有用到官方的东西。
回复

使用道具 举报

0

主题

6

帖子

16

积分

新手上路

Rank: 1

积分
16
10#
发表于 2020-12-9 18:09:25 | 只看该作者
好的,现在升级到7.8了,我试试能用吗
回复

使用道具 举报

0

主题

6

帖子

16

积分

新手上路

Rank: 1

积分
16
11#
发表于 2020-12-9 18:51:53 | 只看该作者
可以用,已经可以显示了,多谢版主提供好工具使用
回复

使用道具 举报

0

主题

6

帖子

16

积分

新手上路

Rank: 1

积分
16
12#
发表于 2020-12-9 19:09:53 | 只看该作者
软件部分文件显示不出来,放大后仍显示不出来,希望可以改进
回复

使用道具 举报

0

主题

1

帖子

12

积分

新手上路

Rank: 1

积分
12
13#
发表于 2020-12-29 03:06:14 | 只看该作者
楼主你好,很感谢你的分享,我最近也在搞lvgl的字库,我按照你的教程做了一遍,但是最后什么也没有显示,请问是什么回事?是我烧写bin文件出错还是修改代码出错了?请问可以发完整的代码工程参考一下吗?我用的也是正点原子的战舰板,应该适配楼主的代码,谢谢楼主,感谢楼主
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
14#
发表于 2020-12-29 08:50:18 | 只看该作者
Pupil 发表于 2020-12-9 19:09
软件部分文件显示不出来,放大后仍显示不出来,希望可以改进

你的应该是WIN10系统,然后你设置了字体放大吧,桌面右键可以修改字体放大的。
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
15#
发表于 2020-12-29 08:53:40 | 只看该作者
LY3T 发表于 2020-12-29 03:06
楼主你好,很感谢你的分享,我最近也在搞lvgl的字库,我按照你的教程做了一遍,但是最后什么也没有显示,请 ...

你这半夜还在搞,也是够拼的。你先测试内部字体能不能显示,如果内部字体能显示了,说明你外部读取有问题,你把bin文件转成数组文件直接加入工程测试一下,看看正常不。
回复

使用道具 举报

0

主题

7

帖子

26

积分

新手上路

Rank: 1

积分
26
16#
发表于 2020-12-29 17:46:04 | 只看该作者
楼主你好,我这边内部字体中文显示不了。不知道是怎么回事。
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你!");
}
我是直接把默认字体改成了我加进去的字体。

微信图片_20201229174506.jpg (60.73 KB, 下载次数: 1742)

微信图片_20201229174506.jpg
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
17#
发表于 2020-12-29 17:49:10 | 只看该作者
wucq 发表于 2020-12-29 17:46
楼主你好,我这边内部字体中文显示不了。不知道是怎么回事。
void lv_test_cont_1(void)
{

你C文件没有使用UTF8编码,这个C文件用记事本打开,另存为,选择UTF8编码
回复

使用道具 举报

0

主题

7

帖子

26

积分

新手上路

Rank: 1

积分
26
18#
发表于 2020-12-29 18:00:04 | 只看该作者
阿里兄 发表于 2020-12-29 17:49
你C文件没有使用UTF8编码,这个C文件用记事本打开,另存为,选择UTF8编码

有的。然后我打开字体文件 “你”这个字在文件里面的索引好像是0x4f60  这个好像是Unicode的编码。
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
19#
发表于 2020-12-29 18:01:53 | 只看该作者
wucq 发表于 2020-12-29 18:00
有的。然后我打开字体文件 “你”这个字在文件里面的索引好像是0x4f60  这个好像是Unicode的编码。 ...

不是字库文件,而是说你使用文字所在的源码文件,lv_label_set_text(obj2_1, "abc你!");这句话所在的文件需要UTF8编码。
回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
20#
发表于 2021-2-25 10:37:11 | 只看该作者
使用0.3产生字库,将bin文件通过B2C软件转换为c数组,加入工程,参考安富莱的例子,keil里面直接烧写字库到flash,不需要用sd卡作为中介。
回复

使用道具 举报

45

主题

311

帖子

2814

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2814
21#
发表于 2021-2-25 10:42:00 | 只看该作者
sinotyk 发表于 2021-2-25 10:37
使用0.3产生字库,将bin文件通过B2C软件转换为c数组,加入工程,参考安富莱的例子,keil里面直接烧写字库到 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|里飞网  

GMT+8, 2024-11-23 15:39 , Processed in 0.128834 second(s), 6 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表