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

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

[复制链接]
lebment 发布时间:2020-7-6 21:58
建议论坛支持一下markdown。( h4 r. G: q- a6 J# K7 p2 w
后面STM32创客赛,我会放出2-3帧的人脸检测,非源码,比赛完了再放!!!- \' ~6 m/ D1 z
9 \1 }- e  O( \; X9 ]! w4 Z. {0 M3 W
# LVGL SD卡字库显示中文' g; x" V% D3 B4 G/ G
## Step1---字库文件准备8 [0 T* p( i# W7 c2 K  h& a% ?
* lvglFontTool v0.3 由阿里大佬开发,请自行搜索下载# u, @/ V& O1 Q* u
* 不赘述如何使用该工具,请将生成的bin文件和C代码分别放入SD卡和工程
( x' a, g: b9 `## CubeMX生成工程( \7 R3 Y3 C& Z' Z6 T6 M9 j$ F
* 工程包含LCD驱动、SD卡驱动和其它需要的驱动
8 N) W. B2 C6 j5 T* 修改lvglFontTool的代码,如下:- h" z/ Q4 Q/ ^# [# O2 n* D
---6 [- P; i2 Y7 W( P! m3 X
    static uint8_t *__user_font_getdata(int offset, int size){$ S* u, ^9 \: l& s  y
        //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);# ~6 R' h$ f- J3 C  ]
        //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);& C% g# q9 `# N3 p
    uint32_t br;
; W- G- }8 k7 p+ h9 w2 h' m: |    if( f_open(&SDFile, (const TCHAR*)"0:/system/font/lv_font_msyahei_20_AA4_GB2312.bin", FA_READ) != FR_OK )( m! c4 c; m( F+ y7 A
    {+ `- K' u$ v# c% E6 v
        debug_print("lv_font_msyahei_20_AA4_GB2312.bin open failed\r\n");. _3 z: h2 ]9 y$ e1 A9 j
    }
, E. y% p# e. ]) ~    else
3 c$ G8 T0 r8 R- @# k. e    {, n. ?9 T/ v1 P$ P5 ?! v
        if( f_lseek(&SDFile, (FSIZE_t)offset) != FR_OK )
' J. B& }" J: Y& ^" k# i        {# b3 g* g9 o' x' D
        debug_print("lv_font_msyahei_20_AA4_GB2312.bin lseek failed\r\n");( I6 o1 D3 c. k6 J& b
        }3 f6 f# ~! O- H2 O
        if( f_read(&SDFile, __g_font_buf, (UINT)size, (UINT*)&br) != FR_OK )
/ s& l, a. j  c4 A' N        {
7 m- w$ v$ ^( c# x9 M        debug_print("lv_font_msyahei_20_AA4_GB2312.bin lseek failed\r\n");( j3 A0 ^) G' `+ t. E. m
        }, _( J. V7 d. {$ A) `" u
        f_close(&SDFile);5 G4 p$ Y4 r1 ?. X& N
    }! o7 X$ R  O( O; l3 K
    return __g_font_buf;3 c* `9 W4 m$ h) a
    }
* 修改 lv_conf.h# i" s7 s9 w9 K' G/ |
#define LV_FONT_CUSTOM_DECLARE  LV_FONT_DECLARE(lv_font_msyahei_20_AA1_GB2312) \
1 ^( B/ z/ z  h+ M6 k6 x                                LV_FONT_DECLARE(lv_font_msyahei_14_AA4_GB2312) \
# [, ^5 X& M( M: C5 q4 E! }9 b
4 J% v+ F/ L' J; u7 K. d  |0 b
## 使用字库显示
- ~9 ?) i( j. F+ |/ Q* 7.0之后的lvgl style修改了,不能像以前那样修改字库,特意分享这个,花了点时间。例子如下:
8 f$ W% t+ S5 x7 ?  m- u---5 X9 l0 s( y0 e7 {& }; o: _# g
    char cn_str[] = "STM32中文论坛 \uF004 LVGL"; $ ~3 g' b; B/ Z+ Y8 b
    static lv_style_t style1;
% Q6 {$ z5 Z; y! \    lv_style_init(&style1);
: H$ n- ^$ W: R; e. C/ E8 \6 U    lv_style_set_text_font(&style, LV_STATE_DEFAULT, &lv_font_msyahei_20_AA1_GB2312);
+ u: B6 v( s1 w* {    lv_obj_t * label = lv_label_create(lv_scr_act(), NULL);
. o+ |; n& P7 u1 L: Y9 k8 Q+ n/ K* v    lv_obj_add_style(label, LV_LABEL_PART_MAIN, &style2);+ Z+ t& C0 t/ A% d
    lv_label_set_text(label, cn_str);: f1 X6 B9 m# p
    lv_obj_set_x(label, 0);
: F2 i5 j$ }' k$ V    lv_obj_set_y(label, 0);2 H1 O. C  u- z
* 显示结果:
: N) O, @) Q9 M7 N7 L
! Z& x3 N0 |3 o4 U    <img src="./img1.jpg" width = "300" height = "200" alt="图片名称" align=center />
) D# h! X5 b0 {9 a7 Z7 {; R    <img src="./img2.jpg" width = "300" height = "200" alt="图片名称" align=center />" }0 v/ Z* I# f5 j0 T2 n% k
img2.jpg img1.jpg - E2 ^# Y; x" \  L9 B$ M
% W# k0 d" ]1 \+ a2 c; A  h
### 刷新速度和下一步优化
- Y% p- ^. |' v5 h9 m* 本人测试的平台Nucleo L4R5,三秒刷出来,取决于SD卡速度。
% s, Z6 [9 `" T- `4 J. V* 下一步加入使用QSPI falsh存储中文字库,还是bin文件,测试所用的bin文件约为2M。8 v; O& L! s9 B2 e
5 U# a, X3 S) o6 N, W
/ v, W4 H* F  o, ~2 N0 R
赞 收藏 评论0 发布时间:2020-7-6 21:58

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版