当前位置: 首页 > news >正文

LVGL移植高通矢量字库GT5SLAD3BFA

字库芯片: GT5SLAD3BFA

MCU: STM32F429       

LVGL版本:V8.4

一,实现gt_read_data()

gt_read_data()函数的作用:与字库flash进行通信,函数的定义里调用spi发送数据和接收数据的接口。用户只需要实现该函数,就可以调用GT_Font_Init()进行字库初始化。

请参考下面视频 如何在 32 位 MCU 上使用高通点阵字库:

如何在32位MCU上使用高通点阵字库_哔哩哔哩_bilibili

高通字库使用教程(1)硬件链接与注意事项部分:

高通字库使用教程(1)硬件链接与注意事项部分_哔哩哔哩_bilibili

高通字库使用教程(2)SPI底层函数使用:

高通字库使用教程(2)SPI底层函数使用_哔哩哔哩_bilibili

高通字库使用教程(3)SPI底层函数验证:

高通字库使用教程(3)SPI底层函数验证_哔哩哔哩_bilibili

高通字库使用教程(4)关于库函数的讲解:

高通字库使用教程(4)关于库函数的讲解_哔哩哔哩_bilibili

二,移植

注:如果用户的编译环境是keil,可以通过下方链接下载mindcraft,在mindcraft中自动生成库功生成相应的库文件。

高通字库-高通字库芯片开发资料

1,添加库文件(.lib 或 .a 文件)到LVGL项目工程中

2,初始化字库 

    //字库初始化函数返回大于0表示初始化成功int ret = GT_Font_Init();printf("GT_Font_Init:%d\n", ret);

3,创建一个新的c文件和一个h文件

存放lvgl获取矢量字库的代码

具体c文件代码如下

4,定义 lv_font_t 变量

lv_font_t类型的变量主要用来设置获取字库数据的方法以及获取字符数据信息的方法。函数指针get_glyph_dsc指向的是设置字符宽度和高度的函数;函数指针get_glyph_bitmap指向的是获取字符数据的函数,并返回存储数据的首地址。用户可以只修改这两处,其他参数默认即可。

//获取字符的信息和数据
#if LV_VERSION_CHECK(8, 0, 0)   //lvgl版本号
const lv_font_t gt5slad3bfa_montserrat_24 = {
#else
lv_font_t gt5slad3bfa_montserrat_24 = {
#endif.get_glyph_dsc = _get_gt_font_glyph_dsc_24,             //指向获取字符信息的函数.get_glyph_bitmap = _get_gt_font_bitmap_fmt_txt_24,     //指向获取字符数据的函数.line_height = 16,              //字体需要的最大行数.base_line = 3,                 //从线底部测量的基线
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)   //lvgl版本号范围.subpx = LV_FONT_SUBPX_NONE,    //lv_font_subpx_t中的一个元素
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8    //lvgl版本号范围.underline_position = -1,       //下划线顶部与基线之间的距离(<0表示基线以下).underline_thickness = 1,       //下划线的厚度
#endif.dsc = &font_dsc           //存储的字符数据
};

5,定义 lv_font_fmt_txt_dsc_t 变量

lv_font_fmt_txt_dsc_t变量主要用来设置存储字符数据的内存。用户可以提前定义好一个数组,将这个数组的首地址赋值给glyph_bitmap函数指针。

#if LV_VERSION_CHECK(8, 0, 0)   //lvgl版本号
static  lv_font_fmt_txt_glyph_cache_t cache;    //字体的信息:字符的编码和字形的ID
//存储字体的所有自定义数据
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif.glyph_bitmap = glyph_bitmap,   // 数据存储数组,最小为一个文字大小 static unsigned char glyph_bitmap[130] = {0};.glyph_dsc = NULL,              //描述字形.bpp = 1,                       //每像素比特数:1、2、3、4、8.cmaps = NULL,                  //“lv_font_cmap_fmt_txt_t”变量数组.kern_dsc = NULL,               //*存储字距值。可以是“lv_font_fmt_txt_ern_pair_t*”或“lv_fent_ern_classe_fmt_xt_t” 取决于kern_classes.kern_scale = 0,                //以12.4格式缩放kern值.cmap_num = 0,                  //cmap表的数量.kern_classes = 0,              //kern_dsc类型.bitmap_format = 0,             //lv_font_fmt_txt_bitmap_format_t位图的存储格式
#if LV_VERSION_CHECK(8, 0, 0)   //lvgl版本号    .cache = &cache                 //缓存最后一个字母和字形id
#endif
};

6,实现 _get_gt_font_glyph_dsc_24() 函数

该函数用来设置lvgl最后显示字符的时候需要的参数信息,例如字符的宽度和高度。

#include "gt_30l24a3w_lvgl.h"
#include "lvgl/src/font/lv_font.h"
#include "GT5SLAD3BFA.h"tatic unsigned char glyph_bitmap[130] = {0};   //存储字符数据的数组
/*** @brief 设置字符的宽度,高度以及位深* * @param font 字符信息变量* @param dsc_out 字符的宽度和高度信息* @param unicode_letter 字符编码 * @param unicode_letter_next 下一个字符编码* @return true * @return false */
static bool _get_gt_font_glyph_dsc_24(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter,uint32_t unicode_letter_next)
{//判断编码范围if(unicode_letter >= 0x20 && unicode_letter < 0x80){dsc_out->adv_w = 24;     // 文字的实际宽度dsc_out->box_w = 24;     // 文字的显示宽度dsc_out->ofs_y = -2;    // 文字的显示位置偏移}else{dsc_out->adv_w = 24;    // 文字的实际宽度dsc_out->box_w = 24;    // 文字的显示宽度dsc_out->ofs_y = 0;     // 文字的显示位置偏移}dsc_out->box_h = 24;        // 文字的显示高度dsc_out->ofs_x = 0;         // 文字的显示位置偏移dsc_out->bpp   = 1;         // 文字的位深dsc_out->is_placeholder = false; // 是否是占位符return true;
}

7,实现 _get_gt_font_bitmap_fmt_txt_24 函数

该函数内通过调用矢量字库的get_font函数,获取字库flahs里面的字符数据,获取到的字符数据会存放到lv_font_fmt_txt_dsc_t变量的成员glyoh_bitmap指向的数组。get_font可以根据用户的需求设置获取字符的宽度,高度以及粗细。

/*** @brief 获取字符数据* * @param font 字符信息变量* @param unicode_letter 字符编码* @return const uint8_t* */
static const uint8_t * _get_gt_font_bitmap_fmt_txt_24(const lv_font_t * font, uint32_t unicode_letter)
{lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *)font->dsc;  //赋值存储字符数据的数组的首地址//判断位图的存储格式if(fdsc->bitmap_format == LV_FONT_FMT_TXT_PLAIN) {//判断编码范围if(unicode_letter >= 0x20 && unicode_letter < 0x80){// 读取 ASCII 字符get_font(&fdsc->glyph_bitmap[0], VEC_FT_ASCII_STY, unicode_letter, 24, 24, 24);return &fdsc->glyph_bitmap[0];  //返回存储数组的首地址}else{#if 01// Unicode 转换为 GBK 编码uint32_t gbk = U2G(unicode_letter);if(0 == gbk){return NULL;}// 读取 GBK 字符get_font(&fdsc->glyph_bitmap[0], VEC_SONG_STY, unicode_letter, 24, 24, 24);#elseU2G_GetData_16X16(unicode_letter, &fdsc->glyph_bitmap[0]);#endifreturn &fdsc->glyph_bitmap[0];  //返回存储数组的首地址}}return NULL;
}

8,使用 

lv_obj_set_style_text_font(label, &gt5slad3bfa_montserrat_24, 0);//获取字库数据
  1. 高通字库官网:联系我们,索取样品,获取详尽资料。高通字库官网链接
  2. 加入高通官方企业微信群:获取最新资讯,享受专业技术支持。
  3. 高通官方软件:一键获取字库开发SDK,告别繁琐的手动操作。详细指南,请参考获取高通字库开发资料链接

 

相关文章:

  • 前端开发实用技巧:封装通用下载导出文件或图片方法
  • AXOP34062: 40V双通道运算放大器
  • OpenCV中的SIFT特征提取
  • 特斯拉宣布启动自动驾驶网约车测试,无人出租车服务进入最后准备阶段
  • JAVA---面向对象(下)
  • Base64编码原理:二进制数据与文本的转换技术
  • Pandas 数据导出:如何将 DataFrame 追加到 Excel 的不同工作表
  • 大数据开发环境的安装,配置(Hadoop)
  • 【MySQL数据库入门到精通-07 函数-字符串函数、数值函数、日期函数和流程函数】
  • Freertos--统计所有任务栈信息以及CPU占比和钩子函数
  • 声音分离人声和配乐base,vocals,drums -从头设计数字生命第6课, demucs——仙盟创梦IDE
  • txtai:全能AI框架
  • 【Unity 与c++通信】Unity与c++通信注意事项,参数传递
  • Zeppelin在spark环境导出dataframe
  • pandas读取MySQL中的数据
  • Swift中Class和Struct的深度对比分析
  • 【C++基础知识】折叠表达式详解--结合上一篇
  • Qt ModbusSlave多线程实践总结
  • 基于STM32、HAL库的MCP3421A0T模数转换器ADC驱动程序设计
  • Axure全局变量的含义与基础应用
  • 经济日报刊文:积极应对稳住外贸基本盘
  • 宜昌为何能有一批世界级农业:繁育虫草养殖鲟鱼,柑橘魔芋深耕大健康
  • “全国十大考古”揭晓:盘龙城遗址、周原遗址等入选
  • 文旅部:今年一季度国内出游人次17.94亿,同比增长26.4%
  • 上金所:调整黄金、白银延期部分合约保证金水平和涨跌停板
  • 我国已顺利实施20次航天员出舱活动,达到国际先进水平