建议论坛支持一下markdown。 后面STM32创客赛,我会放出2-3帧的人脸检测,非源码,比赛完了再放!!!: P' p9 @& g4 ^8 u2 N% ] 9 t# ]$ f O, G0 @& L4 P" \$ {! G # LVGL SD卡字库显示中文5 t5 _/ F4 m4 T3 T. F ## Step1---字库文件准备8 P1 e6 _1 ?% h1 B) t0 p. P- R# j! j * lvglFontTool v0.3 由阿里大佬开发,请自行搜索下载3 P) O, [" \3 s: y% g * 不赘述如何使用该工具,请将生成的bin文件和C代码分别放入SD卡和工程! J0 X! J) w+ S1 @; s/ D, I! g: h( t3 Q ## CubeMX生成工程 * 工程包含LCD驱动、SD卡驱动和其它需要的驱动$ O4 b4 t* p |% e9 ? F+ v6 [% g * 修改lvglFontTool的代码,如下:$ O5 |( P% c9 o/ E0 o ---/ x; P( N& U# @$ v: j static uint8_t *__user_font_getdata(int offset, int size){ //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);/ V; U" @3 T0 O. g //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);; e( V& q' v: w0 ^! g p: } uint32_t br;9 n; _1 O6 x: L5 ~" N if( f_open(&SDFile, (const TCHAR*)"0:/system/font/lv_font_msyahei_20_AA4_GB2312.bin", FA_READ) != FR_OK ) { debug_print("lv_font_msyahei_20_AA4_GB2312.bin open failed\r\n"); } else {7 T* x3 |* v) j& T' X8 a4 r$ P if( f_lseek(&SDFile, (FSIZE_t)offset) != FR_OK )# t) d: p5 e9 J( B" f {6 B- l4 L. U w; _7 E7 y% g+ J" V debug_print("lv_font_msyahei_20_AA4_GB2312.bin lseek failed\r\n"); } if( f_read(&SDFile, __g_font_buf, (UINT)size, (UINT*)&br) != FR_OK )2 q; I" @: j& U2 S; E { debug_print("lv_font_msyahei_20_AA4_GB2312.bin lseek failed\r\n"); } f_close(&SDFile); }& G4 H) s) a7 E. T$ [! F v return __g_font_buf; }* 修改 lv_conf.h6 m2 y7 M$ @4 E3 W' G* z #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(lv_font_msyahei_20_AA1_GB2312) \8 I. t' X b9 D& g LV_FONT_DECLARE(lv_font_msyahei_14_AA4_GB2312) \ 9 |. W- g0 }, {9 c7 x: R ## 使用字库显示 * 7.0之后的lvgl style修改了,不能像以前那样修改字库,特意分享这个,花了点时间。例子如下:0 j K( t& _1 e" W- O t --- char cn_str[] = "STM32中文论坛 \uF004 LVGL"; static lv_style_t style1;9 E O+ i5 k9 _7 Z lv_style_init(&style1);5 L: z1 {* Y# K( y lv_style_set_text_font(&style, LV_STATE_DEFAULT, &lv_font_msyahei_20_AA1_GB2312);. X- C. o5 X% J2 n4 ^# } lv_obj_t * label = lv_label_create(lv_scr_act(), NULL);/ J: o5 d- s' w$ S/ F lv_obj_add_style(label, LV_LABEL_PART_MAIN, &style2);. Z0 F* m( O8 ~9 ~ e9 C& {# K lv_label_set_text(label, cn_str); lv_obj_set_x(label, 0); lv_obj_set_y(label, 0); * 显示结果: ! q0 d: A( X, x$ L8 x <img src="./img1.jpg" width = "300" height = "200" alt="图片名称" align=center /> <img src="./img2.jpg" width = "300" height = "200" alt="图片名称" align=center /> 3 h3 A/ P9 h! m2 Z9 {: c ### 刷新速度和下一步优化- A* m& r* ?; x9 Y8 s * 本人测试的平台Nucleo L4R5,三秒刷出来,取决于SD卡速度。* [* `6 q1 [% b- ~0 t * 下一步加入使用QSPI falsh存储中文字库,还是bin文件,测试所用的bin文件约为2M。$ l- Y5 x" T3 ]) Q% f3 W' O |