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

相关文章

使用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

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

OpenStack离线Train版安装系列—0制作yum源

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版