你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

littlevgl(LVGL v7.0) 外部SD卡存放中文字库并显示

[复制链接]
lebment 发布时间:2020-7-6 21:58
建议论坛支持一下markdown。$ V% [$ M& J* o
后面STM32创客赛,我会放出2-3帧的人脸检测,非源码,比赛完了再放!!!
5 m' ^7 ?! Z  V. x1 E1 r5 J! u
) M4 P3 i/ r0 Y5 c3 R! w6 V. ^# LVGL SD卡字库显示中文) r, ?4 b9 B+ Q* [- i; ?
## Step1---字库文件准备% W2 i! n0 q# a( d
* lvglFontTool v0.3 由阿里大佬开发,请自行搜索下载
$ J/ P3 V+ O. _1 s8 ~* 不赘述如何使用该工具,请将生成的bin文件和C代码分别放入SD卡和工程" S  I6 D; y7 v( q! Z
## CubeMX生成工程
& Q7 ]% F% e& Y: V( E: W7 n* ^5 B* 工程包含LCD驱动、SD卡驱动和其它需要的驱动
+ T( _$ `9 n# k# P$ i* 修改lvglFontTool的代码,如下:1 T! N, |. D4 I1 n
---
3 ?7 j7 E: I0 a, b& x0 E  u    static uint8_t *__user_font_getdata(int offset, int size){' }- r$ q( g( V
        //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);6 r: j3 f! \/ m9 ?
        //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);5 Z# |+ c. R' a( \5 g
    uint32_t br;$ A- x, Q. T4 p/ B3 J
    if( f_open(&SDFile, (const TCHAR*)"0:/system/font/lv_font_msyahei_20_AA4_GB2312.bin", FA_READ) != FR_OK )
! X3 L+ \( y% ~" @# L6 g    {* n$ j4 F$ b/ i
        debug_print("lv_font_msyahei_20_AA4_GB2312.bin open failed\r\n");
. U5 P, P* b$ z# l+ j$ \, @    }
% _& r  w* A) @8 w% B+ R: r) u    else
1 W' l! b( V% ]4 w, I0 i3 h4 D* q% s, c    {
" l- `1 A3 _- @5 K8 `+ h        if( f_lseek(&SDFile, (FSIZE_t)offset) != FR_OK )9 z3 @) c. G" k/ `: t
        {" R7 i) J' C1 P+ j3 J! W$ I+ d
        debug_print("lv_font_msyahei_20_AA4_GB2312.bin lseek failed\r\n");
, U' f# i& J8 g        }
" _; ^8 K- R) o        if( f_read(&SDFile, __g_font_buf, (UINT)size, (UINT*)&br) != FR_OK )  _1 o  y: L5 K* i( E; f3 _" n
        {9 G  t% S/ M9 i7 H
        debug_print("lv_font_msyahei_20_AA4_GB2312.bin lseek failed\r\n");. P' f* P/ y  b% i4 E4 D: n) ]
        }; `- d. t% T8 s2 U& v
        f_close(&SDFile);
+ t" n4 }+ s! y/ k; b( M8 m    }
8 T! h0 J8 O2 a' M) P    return __g_font_buf;
- E" Y9 R5 s! }, }  X5 ]    }
* 修改 lv_conf.h
& L# v' C4 U2 y' M#define LV_FONT_CUSTOM_DECLARE  LV_FONT_DECLARE(lv_font_msyahei_20_AA1_GB2312) \5 l3 J7 ?8 d% n
                                LV_FONT_DECLARE(lv_font_msyahei_14_AA4_GB2312) \
* [/ s; K2 R4 n9 E5 }

* h' b! \- c% J7 x## 使用字库显示
5 c# e% X! h' G' c& g$ _/ v  H* T1 H; a* 7.0之后的lvgl style修改了,不能像以前那样修改字库,特意分享这个,花了点时间。例子如下:5 L# _) H6 @! d/ z: ^6 _
---
" V$ n$ Y3 ^, ^$ ?# H/ w( b+ P    char cn_str[] = "STM32中文论坛 \uF004 LVGL"; 0 {: g7 C7 O4 P9 X
    static lv_style_t style1;* r% S; E, m& _1 _! F4 q! E
    lv_style_init(&style1);
& |# u0 ^6 O' R- a6 C    lv_style_set_text_font(&style, LV_STATE_DEFAULT, &lv_font_msyahei_20_AA1_GB2312);! C8 Y+ x9 H+ \) j
    lv_obj_t * label = lv_label_create(lv_scr_act(), NULL);
, J% l, T' L, x% t9 M( [    lv_obj_add_style(label, LV_LABEL_PART_MAIN, &style2);
) h5 j6 O  ?! o- L. g# R9 Z1 G# T    lv_label_set_text(label, cn_str);
+ ~7 Y/ X# D, j# W6 v0 R    lv_obj_set_x(label, 0);
+ p/ K! ~% G! t7 h" i# @% i9 V2 I    lv_obj_set_y(label, 0);  J- k8 _. I0 n* t
* 显示结果: ( O+ v1 {; M7 K! q, u, K* `

+ Q- g+ R9 U* R8 V1 i* M    <img src="./img1.jpg" width = "300" height = "200" alt="图片名称" align=center />
. M- F6 a' m; L9 h' S* V    <img src="./img2.jpg" width = "300" height = "200" alt="图片名称" align=center />' H' ^$ |2 a5 z- z
img2.jpg img1.jpg ; b' [& ?1 I0 G: z) z
, z# q+ {, z8 [8 R: y
### 刷新速度和下一步优化: T" C) g+ y( X( e
* 本人测试的平台Nucleo L4R5,三秒刷出来,取决于SD卡速度。
0 U; e- @$ ~2 U2 ~: U* 下一步加入使用QSPI falsh存储中文字库,还是bin文件,测试所用的bin文件约为2M。% y3 `0 s1 i( Q5 ]3 k1 h
! l- k9 F3 l# H- F0 {  f" [
5 x( r( `2 Y2 t
收藏 评论0 发布时间:2020-7-6 21:58

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版