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进行使用,相信大家也知道如何操作了,如果大家有更好更优雅的操作方式的话,非常希望能一起探讨。另外如果中间还有疑问的话,也可以与我交流。

  • 21
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于STM32的NB-IoT设计是一种利用STM32微控制器和NB-IoT技术实现物联网连接的设计。NB-IoT(Narrowband Internet of Things)是一种低功耗广域物联网技术,具有广阔的覆盖范围、低功耗、低成本和高可靠性等特点。 在基于STM32的NB-IoT设计中,首先需要选择适合的STM32微控制器,该微控制器应具备足够的计算和通信能力。然后,需要集成NB-IoT模块,这个模块能够实现与基站的通信。NB-IoT模块通常具有集成的射频前端、传输协议和相关的硬件接口。 设计中,可以使用STM32的开发工具(如CubeMX和Keil等)来开发软件。通过该工具,可以配置和初始化STM32微控制器和NB-IoT模块的相关参数,并将相关代码编译、下载到开发板中。设计中的软件部分可以包括驱动程序、通信协议栈和应用程序等。 在应用中,基于STM32的NB-IoT设计可以实现各种功能,如环境监测、智能农业、智能城市和智能家居等。例如,可以通过该设计实现对温度、湿度和空气质量等环境参数的实时采集和监测,并通过NB-IoT网络将相关数据上传到云端进行分析和处理。同时,可以通过云端向设备发送远程控制指令,实现对设备的远程控制。 总之,基于STM32的NB-IoT设计能够实现低功耗、广覆盖的物联网连接,具有较高的可靠性和扩展性。这种设计可以应用于各种领域,为物联网应用的开发和部署提供了一种有效的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值