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

2024-01-30 03:04

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

这篇关于STM32外部Flash-----unicode字库制作基于LvglFontTool(AuroraFOC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658927

相关文章

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的, 论文可以从 https://arxiv.org/abs/2205.14135 页面下载,点击 View PDF 就可以下载。 下面我

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo