STM32外部Flash-----unicode字库制作基于LvglFontTool(AuroraFOC)

一. 简介

哈喽,大家好。在使用LCD屏幕显示的时候,绝大部分情况下都是需要使用文字进行显示(中文或英文),所以就会面临一个问题: 如何制作字库。在字符种类比较少的情况下且单片机资源足够的情况下,一般使用软件直接生成对应字符的点阵就可以了(一般存储为C数组的方式),通过数组下标,或者索引进行获取,这样做的优点是比较简单,缺点就是对于想显示的字符,不够直观,容易混乱不清,不适合大程序使用;但其它情况下,则需要使用特定编码格式的字库文件进行存储。

今天将会给大家分享一下如何使用LvglFontTool软件制作unicode编码的字库,并且下载到STM32外部Flash进行使用。

本设计将基于AuroraFOC开发板进行开发和演示,需要开发板的可以找我购买,289元包邮到家(将会为购买者提供技术交流群服务,大家一起学习一起成长)。wx: WU1356742146

请添加图片描述

二. LvglFontTool生成字库

相信学过LVGL的朋友应该对这款软件并不陌生了,它是用来专门生成LVGL使用的字库的,不需要修改什么,可以直接使用。但是现在,它将为我所用。

软件的操作非常简单,就不作过多的介绍了,大家可以参考如下的配置,其中有一个地方需要注意的是: 抗锯齿这里要选择1,因为我选择4的时候,没有解析成功,但没有找到问题(能力有限哈)。

点击开始转换后,会生成两个文件,一个是.bin的字库文件,这个字库文件需要下载到单片机的外部Flash中;另外一个是.c文件,提供的函数接口,用来读取字符信息和字符的点阵数据。至此这个软件的使命就完成了。

请添加图片描述

三. QT 验证

这部分工作,主要是为了代替在单片机上的调试工作,电脑上开发调试肯定会比单片机方便得多(还是推荐一下大家学习一下相关的开发,在必要的时候,可以提升开发效率)。

1. 移植LvglFontTool软件生成的.c文件

将结构体定义copy到自己的文件中,不需要做任何修改请添加图片描述

将这两个函数copy到自己文件中来,并且在__user_font_getdata函数中,添加文件读取的函数

请添加图片描述

另外还需要记住一下这个参数,后面在显示字符串的时候,会使用到

请添加图片描述

2.编写显示函数

这部分就比较简单了,只需要调用getFont16Data这个函数,然后将中文的unicdoe编码值传进去就可以了,就可以得到字库的显示数据了,

请添加图片描述

请添加图片描述

到这里,就成功的从字库文件读取数据,并且显示了,后面直接函数替换就可以直接在单片机上进行显示了。

四. 上板验证

这个部分主要是在qt的基础上进行一个函数的替换,以及一些相关事项需要注意。

将字库文件下载存储到外部Flash大家可以使用自己熟悉的方式,比如说串口,单片机接收到串口数据后,再将接收到的数据存储到外部Flash中去即可。

1. 读取字库函数替换

将qt中读取文件相关的函数,使用读取flash的函数替换

请添加图片描述

2. 获取字库数据添加

为了能够显示字符串(字符与字符之间的间隔以及字符的高度保持一致),需要将如下信息获取到

请添加图片描述

3. 字符串显示函数

这部分比较关键,需要对编码有一些相关的了解,不然就有一些坑需要你去踩。

我们知道ASCII码是对应的一个字节,而我们中文编码至少是两个字节,那么我们就需要对输入进来的数组进行判断,判断方式就需要去学习一下相关的编码方式了。

首先,我这里使用的UTF-8编码的文件,而UTF-8编码可以有1-4字节编码,那么首先需要确定我们使用的中文是使用的几个字节,这个简单,直接使用printf函数打印一下所占用的字节数就可以了(我这边中文是占用了三个字节)。

我们的字库文件是unicode编码的,我们还需要将UTF-8编码转换为unicode编码,可以根据下面这幅图进行转换。当UTF-8使用1字节编码的时候,最高位为0,而使用多字节编码的时候,最高字节的高位1的个数和编码字节个数相等。单字节的UTF-8编码和Unicode是一致的,不用转换。

假如现在是三字节的UTF-8编码,那么对应下表,需要将第一个字节的高四个bit去掉,然后将第二个字节的高两个bit去掉,最后将第三个字节的高两个bit去掉,也就是只保留表中的x,组成一个16bit的数据,这个数据即为UTF-8转换为unicode后的编码。

请添加图片描述

了解到这,就可以开始编码代码啦,编写的代码如下图所示,非常简介明了。中间使用的一些参数是用来控制每个字符的偏移值,用来确保字符与字符之间的间隔保持一定,字符高度保持一致。

请添加图片描述

最后显示效果如下

请添加图片描述

五. 小结

本次给大家分享了一下,如何使用LvglFontTool软件制作unicode编码的字库,并且下载到STM32外部Flash进行使用,相信大家也知道如何操作了,如果大家有更好更优雅的操作方式的话,非常希望能一起探讨。另外如果中间还有疑问的话,也可以与我交流。

相关推荐

  1. 关于基于STM32使用外部中断控制按键

    2024-01-30 16:10:02       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 16:10:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 16:10:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 16:10:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 16:10:02       20 阅读

热门阅读

  1. gitignore规则

    2024-01-30 16:10:02       39 阅读
  2. 生物科学大模型:驱动生物医学研究的未来

    2024-01-30 16:10:02       50 阅读
  3. 如何将本地项目上传到ac git 云端

    2024-01-30 16:10:02       47 阅读
  4. go语言中的Mutex

    2024-01-30 16:10:02       30 阅读
  5. Docker

    Docker

    2024-01-30 16:10:02      37 阅读
  6. Qt Bezier闭合曲线插值(2D)

    2024-01-30 16:10:02       39 阅读
  7. FreeRTOS简介

    2024-01-30 16:10:02       42 阅读
  8. HTML5 服务器发送事件(Server-Sent Events)

    2024-01-30 16:10:02       42 阅读
  9. JNDI以及利用JNDI进行漏洞攻击

    2024-01-30 16:10:02       37 阅读