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

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

[复制链接]
STMCU小助手 发布时间:2022-8-27 19:04
1.文件系统移植准备/ t; F( `% F8 @- \8 `2 P! |
    直接根据上几个章节移植的文件直接修改FATFS配置到LVGL文件系统。
; v. w7 i" A7 i0 \7 |5 ^+ I0 O/ v% Y% D3 U6 A4 O* V
    准备一张图片,尺寸不要超过屏幕大小。
4 q* f5 A, F+ R% N* Y% j& H) X# j! t0 w  ]# Y6 a0 V
U6Z~4TU]XB680MR16LR@XVV.png
3 q' j7 i, Z5 ]% G2 `' g: D" _% ?+ p; d; d( x
使用lvgl_image_convert软件将dog.png转换为dog.bin文件,并将dog.bin复制到SD卡根目录下。3 P3 M& U" {4 ?& s
1 L& l7 d& E* S. X
输出格式为Bin_565
2 n6 p9 X+ L8 v5 {( G% S7 {. r) }8 n/ l* z' e
UN]K8(5XV}62T58)[@%)@GV.png
) m, J, y5 U- |  L2 ]6 o0 }9 z0 F* F9 T  P
2.KEIL&LVGL文件系统配置) p8 ]" |$ {. h/ r) T8 B% E' w
    修改lv_conf.h文件
9 p: V  F( f9 D. v
' o  d' i. \& n0 k8 o#define LV_USE_FS_FATFS 1
  ~- M# i( ]1 e5 @$ M" V) e% s& b0 Q: j, E* e/ a
#if LV_USE_FS_FATFS
% p% a8 T' n, N
* P+ F/ ~+ ~7 ^    #define LV_FS_FATFS_LETTER '0'    // 卷标  + `/ w% `* |) T  C, O: V
; u: I8 A4 E; N' L, p
    #define LV_FS_FATFS_CACHE_SIZE 2*512 // 读取大小  
& }" ~# a) q- D
6 M4 L( s6 k. {& m  B#endif* F: a" `; t0 p5 }: k6 n
7 f( s& z9 H( E7 H
    打开并使能lv_port_fs.c、lv_port_fs.h,: P5 f1 ^: I5 L! ~& C
1 w. D6 G. [. n
lv_port_fs.c只需要修改一下几个函数就行,其他的暂时注释掉,以后若有需要在进行修改。我们这里就先实现图片的加载
" O" M/ R7 x8 k4 C* H$ N5 Y6 e
static void fs_init(void);
/ I6 o4 c7 @, p& w+ [& d5 B. J  ]* D6 H' E" \
static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode);
( i5 r# z; l0 U% h4 j6 ~! j9 T$ c, D' @1 P7 ]: x  d  l
static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p);
' K5 M* o0 ?3 X. S5 _7 f
( D- w- u% t6 o$ e9 b+ q8 D4 ^/ u7 O. wstatic lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br);
/ O" Y3 \. m' ?3 V3 M0 D; h  T  ?  }$ o; W2 I+ u! s
static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw);
3 B, t7 L; D9 B; q3 O, P8 V) d( D) l# |8 E
static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence);
& b/ U( Z3 E) y1 w3 w0 O; s0 |+ c4 _
static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
7 m# N6 M5 D5 a2 S+ @/ o
% _0 X- ?5 n) V& O7 }static void * fs_dir_open(lv_fs_drv_t * drv, const char * path);
' W0 R, ^/ Q2 G
4 t: p! F& Z  n3 p9 o. ustatic lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * dir_p, char * fn);
* z, r6 R: m. Z3 u  ]% D8 o0 [8 `: f# o' ^" K' U
static lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * dir_p);
4 Y6 c0 p* W% r' E3 m6 F5 Y! f
, q1 w& [5 ?* V8 Z+ s* `        下面的几个函数按顺序进行修改,先修改初始化函数void fs_init(void);。这里的记录就直接附截图了,还是自己手动配置一下记忆更深。' t' t; t! H2 W: P& z6 z
% l- y0 A8 X0 B
$T@G)H{%HAT}6V@ISSVI2MI.png + ^# ]! y. N" O/ `1 W9 U. s  a
; X5 Z4 `( D& H& A
B03WG8P6QTHSCXTU@VY~_IO.png ' }! d0 v( I! s. Z8 ]# E
( k$ f6 y1 I7 W4 W# u) {4 p/ F
0ZF}43V{{IU2`8BDRL@4NEN.png
  x' m1 ]6 @, C) ?7 m3 R
( p9 P. X+ m. v2 b+ V
( C. o2 B! e) {! Q# |( J! U3.文件系统测试
+ d0 _2 u  ]) P% V. y& ?: ^+ M, ]    在上一章节记录的基础上面将按钮控件,替换称为一个带图片背景色的按钮。
: Q8 s, \9 X4 P4 b3 n- G( a7 `2 D# d- F- k( q% S9 q
    先在初始化函数中初始化LVGL文件系统- g# s$ _8 W" x3 [
4 r, r" y3 x" d1 N: y1 Y: {$ A' D$ K
1%XZ][IQ0HH1(YOF{~[%WAQ.png 0 \1 c+ |/ c1 W8 c
. I. F6 w% t3 Q
main函数修改; ]0 @/ Y& a+ x1 l7 X, u6 v) _" S

' ]6 ~7 o9 P7 Y9 _- O QGW9U7T[Z9]8606V992Q[CA.png
# Q7 _& {9 x5 M, m: j) C1 @: i4 x2 g* P$ u$ p% J
实际效果。; N2 B, i4 Q" y
' t- Q5 {) a& i! @" F7 y# ~: v
{V3E)$V_S8CNK9(Y~C_S~{2.png
: O. \1 Z, }; d1 \# Y9 k$ l2 G$ J8 P9 Q' I7 R; Y) x3 E
4.LVGL模拟器加载本地图片
' q0 X" Z/ d6 v1 W6 |- J    打开建立的LVGL模拟器启动文件* L2 r) ^$ a" j# T

; W) K& j1 i, Y$ M) ~: g UPAP6_[2Z]O3P8OXF2Z5{1X.png
) x! b6 `8 D, U! i8 D1 l0 x% F) G- `/ b
修改lv_conf.h中
' W2 e. d+ S$ @2 e1 _4 W& d3 [/ w' ^, k+ _5 R3 f
在这里一定要把LV_COLOR_DEPTH定义为16,在前面我们转换的图片输出格式是Bin_565,按默认的LV_COLOR_DEPTH定义为32,是显示不出来图片的。
  F1 k: ]; l' S0 f) ~% ^' O5 L& f# ]' g  }9 g+ y1 u5 w
定义FS卷标为0跟KEIL中的一样,可以方便程序移植。
9 G, ~# g1 {* m* B6 }" V% y$ U
+ S( i  l  T/ T: k# \#define LV_USE_FS_WIN32 '0'        /*Uses CreateFile, ReadFile, etc*/5 G. t6 |$ ?! }- y

4 I1 i; B, ~/ T9 Y 8{RM$~Q{X3CLFB_2]IU}YP1.png 9 M0 ?3 W9 ~) T; v: N: E; O8 \
( Q! q9 T+ M9 W& x2 ]1 e7 g1 ?2 X
修改lv_conf_internal.h( p5 `) G) ]1 I) D% i; N
  y- g/ s8 C) g. P
先在KEIL_LVGL\Simulator\LVGL.Simulator文件夹下面新建image文件夹并把dogmax.bin复制到里面。; v, J: U$ [9 v, M5 a/ Z/ g

7 D7 v9 x0 i; `. \) L 7I8D988P@(_`$O2C__VOXM1.png
0 _  G. l# m5 l0 Z' R) z& e2 r) c) A5 N
修改 #define LV_FS_WIN32_LETTER '0' // 卷标
* S% _/ i! \6 x2 V# V7 G+ g# `
/ B" W8 d) z& a8 f1 V5 l( q#define LV_FS_WIN32_PATH "image/"  // 文件相对路径
% U) a0 {1 u& \  L7 W" o% ~+ w/ {) s( Q5 F: I0 C  N* ~
  #define LV_FS_WIN32_CACHE_SIZE 4*512 // 读取文件缓存大小
" l2 R+ a' [8 o; v4 P4 s% Q/ l  [6 K6 E# N2 p0 E7 p1 V8 m  c
11CJA[1K)Y]M4IG8$TV4VZ5.png % A% f& ?* R8 e) r

& C6 \& `: F( ]) F0 F在main函数中添加以下函数并运行。这里面的main函数内容其实与KEIL中的main函数差不多。
2 D* Y/ N8 K3 s+ T, P. d2 _/ H4 _. ^1 K5 f
P$$I@((2Q9`8I]B6V1_YVX9.png ; O. A! F( H" k6 a, L$ F1 ^

6 x/ X7 k+ ]7 R3 S9 z运行效果。
5 |" w5 V( x/ C% z$ W
8 ]! c1 X7 [: W9 v PGWPYM1@M7YME)$)R%A[RJU.png
" l! D6 F/ L" T: ^4 l; v& B# m5 s' I* a7 z
5.总结
2 U$ N) |( O, z( Z* a+ W* T
        到这里差不多是把LVGL驱动配置完成了,我在移植配置KEIL工程和VS LVGL模拟器时可以看到两个工程引用的的lv_conf.h文件其实不是一个文件,在配置两个文件的路径时要重点注意。
# V) B# l: {4 R6 E
6 g3 o% H6 e4 m) u# h        在运行编译运行LVGL模拟器时,有时候模拟器并不会报错,但是会报错LVGL.Simulator.exe无法运行,这个时候需要将KEIL_LVGL\Simulator\Output\Binaries\Debug\x64文件夹下面的两个文件删除掉就行。这个问题暂时还没有发现是在哪里引入的BUG。
' A5 h& T$ N8 {$ w8 f- @4 I% N3 p/ _5 ^% K
$IHCL)0(CKD{I%RK83641ZS.png 4 O+ p( o) |6 E: L

" u: @. \& p( W! h* E' x8 |6 q' D        这个移植是一学习记录的过程,自己踩过的坑不想再重复一次,也给大家一个参考,免的浪费时间自己摸索。8 I: o9 c$ q7 t+ I  {6 K2 }
2 v) g6 g9 Q2 [
        KEIL工程和visual studio模拟器工程其实可以通过合理的创建公共文件,实现模拟器调试后可以直接在keil中编译下载,这个在后面再谈论一下。
* y+ P* i- q' T8 G3 _- N& j  k/ z5 j. @! g6 G0 d$ e
        为避免大家在我这里浪费时间,我这里先讲一下我会记录一下什么。0 x3 k0 V' q0 s$ Q3 P
2 r& h% r4 \: R; A, }, [
        首先的像按钮、列表、线条之类的单个控件的运用我这里是不会记录的,像LVGL官网、百问网等网站上面有好多高质量的介绍,我是肯定没那些大佬讲解的仔细的,我这里就直接用了,大家有需要的可以直接去那些网站学习。
. _4 G* M0 P3 T% R6 W. J" F7 B! N$ P" M! E/ p% R
        主要是记录一些控件的组合使用,大多是搭配具体的工程,还有就是一些比较晦涩的运用、调试过程遇到的一些坑。近期会学习记录页面管理器,页面之间的联动之类的运用,后期会做一个开发板专门用来学习LVGL,大家如果感觉今后会用得到的话,不妨先三连支持一下。, g, c2 y& Q) @+ Y% p2 ?/ t/ M
9 \$ K4 m( ~+ A( w4 j
作者:鹰头猫咪喵喵鱼
9 V+ T, \1 D& X! U
2 C3 X- _+ W1 ]3 A
赞 1 收藏 1 评论0 发布时间:2022-8-27 19:04

举报

0个回答

所属标签

相似技术帖

官网相关资源

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