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

KEIL&Stm32 LVGL文件系统移植配置-总结

[复制链接]
STMCU小助手 发布时间:2022-8-27 19:04
1.文件系统移植准备6 k3 [4 j; b6 P$ E
    直接根据上几个章节移植的文件直接修改FATFS配置到LVGL文件系统。4 D! }$ e! s' Y& r

& z* m3 _. B& a, Q5 s+ r& v. v! t    准备一张图片,尺寸不要超过屏幕大小。/ C$ m0 h$ ]' c7 w4 D. Y. o
% `7 ^$ j. K, E
U6Z~4TU]XB680MR16LR@XVV.png ! ]' E( |: V0 S1 y

6 M, `! Q5 w5 ^+ X1 P  W5 ~使用lvgl_image_convert软件将dog.png转换为dog.bin文件,并将dog.bin复制到SD卡根目录下。
: b' P! W3 A9 H* h0 I2 D/ c8 m2 ?
5 P1 a/ R6 w1 d( ~0 t2 Q输出格式为Bin_565
' L9 _/ W' B9 K7 }2 L% [
% \6 I1 ~! X% H. u7 S- U6 B  C UN]K8(5XV}62T58)[@%)@GV.png " Y) @+ J) s9 A8 @( @
4 U5 O# o  t+ f. t
2.KEIL&LVGL文件系统配置
6 X2 A3 Y- h6 Z( l$ y: r    修改lv_conf.h文件. L3 E/ [5 \, F! H5 o" O

0 H7 S8 i6 d5 k" r" N/ H8 x#define LV_USE_FS_FATFS 1/ J0 |+ Y' s9 [' T% I. d5 J/ v; G
  B# n& B/ d$ x7 S. k
#if LV_USE_FS_FATFS6 \% C/ c. G6 r6 G6 T

+ f5 l' A. ?7 V* |( q    #define LV_FS_FATFS_LETTER '0'    // 卷标  
  w8 _0 y. x! X; G4 ]( N/ \# ~' K7 [- `4 J% t! ~8 z) ^
    #define LV_FS_FATFS_CACHE_SIZE 2*512 // 读取大小  
7 d, M. g7 n/ A9 R- f) d$ }
0 r- R5 U: M( q#endif4 c: }- v9 b9 n0 s
$ v7 H. s+ c: u5 h; |; p: m* O
    打开并使能lv_port_fs.c、lv_port_fs.h,
3 r# M9 m- Q9 b# [9 E9 O8 G, _
) p0 j: P0 T  z8 C* slv_port_fs.c只需要修改一下几个函数就行,其他的暂时注释掉,以后若有需要在进行修改。我们这里就先实现图片的加载
2 u, P9 T! ^( r
- @8 U3 X6 S8 \- }static void fs_init(void);
* b8 Y: g( R4 b" Y, h
6 b. O3 `; x1 k- B" Nstatic void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode);- o. R1 C/ U; N. k

. r' a6 R5 I: M5 L; ostatic lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p);7 r# p; V' m7 E" Q

; \7 l- a. r2 F  rstatic lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br);
( C, `9 r/ z- e: d1 ]! e  R, [' J# E. f* h
static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw);
/ Y. [! \' n' O9 b) J6 Z9 N3 b7 x
' T7 f, l- w8 rstatic lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence);% {5 P5 q. \* P: {
- a, J; s" k) J& s3 O# t- R  D, Q
static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
: o+ h! X* \0 T/ |" o) Q% j2 p; g- [$ t! r
static void * fs_dir_open(lv_fs_drv_t * drv, const char * path);
8 T7 \. F1 g' ~& w8 R
% H8 j3 i2 H2 e3 Tstatic lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * dir_p, char * fn);
* c$ W0 C, e+ S
( V+ ^4 |3 \3 i' c0 `; ostatic lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * dir_p);8 }3 I0 `4 m) Q
* D- [) L9 @$ Q" R3 ]2 t0 F' V
        下面的几个函数按顺序进行修改,先修改初始化函数void fs_init(void);。这里的记录就直接附截图了,还是自己手动配置一下记忆更深。
" T- |+ e+ h! @5 p: n# h1 }3 O$ {* A  \7 }9 F8 o% U- F
$T@G)H{%HAT}6V@ISSVI2MI.png % j0 X6 ?7 y/ O! ?) f7 R9 e
8 N* z  V1 q5 R. P4 S" K1 D
B03WG8P6QTHSCXTU@VY~_IO.png ! l/ ~5 x9 r0 T0 O5 `

- s+ z: w% M( L0 U8 {- f. B 0ZF}43V{{IU2`8BDRL@4NEN.png
0 {" W& }: o7 q( }+ O! Q; w% C, y) Y) C; X: X
6 D, {, f7 H0 V9 S1 @* ]8 W7 j
3.文件系统测试' s+ U4 Q# Y  ~) ^
    在上一章节记录的基础上面将按钮控件,替换称为一个带图片背景色的按钮。5 b6 s. Y/ i" M4 E  V

" M# ?0 s: i7 B0 }% |; h    先在初始化函数中初始化LVGL文件系统' K1 S, ?* l! [! ]/ s7 u

% K; I7 P4 k. s, \+ [ 1%XZ][IQ0HH1(YOF{~[%WAQ.png
( H1 c7 p! i2 K3 _$ X  Z
7 X; w) e# {* lmain函数修改' z/ Z8 k" d1 t6 B

7 _9 I" O9 r! j, B1 ~ QGW9U7T[Z9]8606V992Q[CA.png ( v2 g  ]( T+ \$ L
8 D' u& q; z4 I' ~1 S6 _) v" ]
实际效果。6 Y$ _4 G& c; l

) c+ l% C- O- [9 k6 u {V3E)$V_S8CNK9(Y~C_S~{2.png
- u+ Y0 F/ b, V& A" f3 {0 e  u6 v' t7 {, B  j# E3 {
4.LVGL模拟器加载本地图片/ `6 Q" G9 V0 n7 M
    打开建立的LVGL模拟器启动文件
( E7 Y- ?2 j4 m/ h/ G9 }
% C* w1 O; o& ~4 w UPAP6_[2Z]O3P8OXF2Z5{1X.png 3 H: o( q0 C% Q% D

4 i8 [5 z& E3 J+ B% u2 x" P5 l5 ^  b修改lv_conf.h中9 r- E" [0 A# h# f6 C$ N3 ~

  b9 Z+ t# @( ~) }在这里一定要把LV_COLOR_DEPTH定义为16,在前面我们转换的图片输出格式是Bin_565,按默认的LV_COLOR_DEPTH定义为32,是显示不出来图片的。
. O4 s" G  A) l) @9 J2 \5 L: C/ x: t
定义FS卷标为0跟KEIL中的一样,可以方便程序移植。1 H3 g7 \% a( @' W) K6 D: a
+ U  \/ K' p  G% t; ?
#define LV_USE_FS_WIN32 '0'        /*Uses CreateFile, ReadFile, etc*/
1 t- G' S+ M" _2 g, e1 u
$ \0 a6 O# ~% i. T3 @# F 8{RM$~Q{X3CLFB_2]IU}YP1.png
$ U" }" r/ `; b. Y6 [* |
, i' j/ K3 ^/ s- p4 r修改lv_conf_internal.h
$ u; a( z& f# \- a! q# ]( n3 `+ m3 b
4 z2 S% a3 Y* G% k% D先在KEIL_LVGL\Simulator\LVGL.Simulator文件夹下面新建image文件夹并把dogmax.bin复制到里面。
8 B" U2 V7 L/ k! R2 g! Y( X2 c, R4 r- X. R
7I8D988P@(_`$O2C__VOXM1.png
8 X% N" G9 J" [- P4 x7 h7 {4 X: X! E
修改 #define LV_FS_WIN32_LETTER '0' // 卷标! p$ G3 x" Y4 I, A

# G4 H! T7 L" l6 {% }5 B% }0 e#define LV_FS_WIN32_PATH "image/"  // 文件相对路径. L+ {  B  w- f; i" D

$ R& {( A7 [5 S/ N- U& Q' c7 I  #define LV_FS_WIN32_CACHE_SIZE 4*512 // 读取文件缓存大小/ U. S" C" y2 L& A' W6 H

# p# \: d! {7 N7 o; p 11CJA[1K)Y]M4IG8$TV4VZ5.png # b6 r( W# ~6 L6 `. h, l

5 \/ y: e* b) ?; b5 D在main函数中添加以下函数并运行。这里面的main函数内容其实与KEIL中的main函数差不多。
3 z+ B9 l2 |1 C
6 g6 y- j$ q: G. K- {+ \  k& w+ Y P$$I@((2Q9`8I]B6V1_YVX9.png
6 r$ g+ O5 k6 [  R
" P% ]9 y6 M  P* d% ~; P% r! n1 Y6 T运行效果。
5 U0 G7 c: {/ J$ @3 J; t( O
+ y: q  A) N9 t4 k" r6 K; R PGWPYM1@M7YME)$)R%A[RJU.png
7 x! B2 J) h% p1 ^. R
/ T) F) d! T! z- O; I3 H* Q. e5.总结
3 E5 D, {& n* f) p& n8 S% L
        到这里差不多是把LVGL驱动配置完成了,我在移植配置KEIL工程和VS LVGL模拟器时可以看到两个工程引用的的lv_conf.h文件其实不是一个文件,在配置两个文件的路径时要重点注意。
& ^- v) ?3 `4 N" p
9 [1 m$ U) w7 l5 |; @* W/ U        在运行编译运行LVGL模拟器时,有时候模拟器并不会报错,但是会报错LVGL.Simulator.exe无法运行,这个时候需要将KEIL_LVGL\Simulator\Output\Binaries\Debug\x64文件夹下面的两个文件删除掉就行。这个问题暂时还没有发现是在哪里引入的BUG。
* V; H; F: w& Q7 G. `5 `7 c& q" M) v4 ?/ l6 x' o6 P
$IHCL)0(CKD{I%RK83641ZS.png
3 P3 @: b  f7 K+ ?1 U& B( n8 C
+ l+ T5 S0 m! v7 `7 y' N, B" w. ?# \        这个移植是一学习记录的过程,自己踩过的坑不想再重复一次,也给大家一个参考,免的浪费时间自己摸索。
- E8 a. n# M6 r; O1 u3 v6 v( }. ~( B1 L3 i( y. I+ D
        KEIL工程和visual studio模拟器工程其实可以通过合理的创建公共文件,实现模拟器调试后可以直接在keil中编译下载,这个在后面再谈论一下。& r1 ~7 s& ^8 U9 O# `
; W3 I$ j3 E0 _1 f, I% Y$ f
        为避免大家在我这里浪费时间,我这里先讲一下我会记录一下什么。
+ X" e' w/ ]/ q5 Y0 A+ ~0 q  c0 r8 U4 M* a
        首先的像按钮、列表、线条之类的单个控件的运用我这里是不会记录的,像LVGL官网、百问网等网站上面有好多高质量的介绍,我是肯定没那些大佬讲解的仔细的,我这里就直接用了,大家有需要的可以直接去那些网站学习。6 ~2 f( L/ q) |+ @
% s0 c6 P$ e* ^( I6 {, O8 k% a1 e
        主要是记录一些控件的组合使用,大多是搭配具体的工程,还有就是一些比较晦涩的运用、调试过程遇到的一些坑。近期会学习记录页面管理器,页面之间的联动之类的运用,后期会做一个开发板专门用来学习LVGL,大家如果感觉今后会用得到的话,不妨先三连支持一下。
' G3 D& ^7 N; q, `4 I. G$ _% j5 L( d% t- c8 U* F! c. h
作者:鹰头猫咪喵喵鱼
* u2 @* h3 C! c' ^$ ^* J5 P5 s' W- |/ v2 K* \
1 收藏 1 评论0 发布时间:2022-8-27 19:04

举报

0个回答

所属标签

相似分享

官网相关资源

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