STMCU小助手
发布时间:2022-8-27 19:04
|
1.文件系统移植准备/ t; F( `% F8 @- \8 `2 P! | 直接根据上几个章节移植的文件直接修改FATFS配置到LVGL文件系统。 / v% Y% D3 U6 A4 O* V 准备一张图片,尺寸不要超过屏幕大小。 % j& H) X# j! t0 w ]# Y6 a0 V
% 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 ( G% S7 {. r) }8 n/ l* z' e
6 o0 }9 z0 F* F9 T P 2.KEIL&LVGL文件系统配置) p8 ]" |$ {. h/ r) T8 B% E' w 修改lv_conf.h文件 #define LV_USE_FS_FATFS 1 ) e% s& b0 Q: j, E* e/ a #if LV_USE_FS_FATFS #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 // 读取大小 #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只需要修改一下几个函数就行,其他的暂时注释掉,以后若有需要在进行修改。我们这里就先实现图片的加载 4 C* H$ N5 Y6 e static void fs_init(void); + [& d5 B. J ]* D6 H' E" \ static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode); 9 T$ c, D' @1 P7 ]: x d l static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p); static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br); ? }$ 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); 8 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); 1 w3 w0 O; s0 |+ c4 _ static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p); static void * fs_dir_open(lv_fs_drv_t * drv, const char * path); static lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * dir_p, char * fn); % D8 o0 [8 `: f# o' ^" K' U static lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * dir_p); 下面的几个函数按顺序进行修改,先修改初始化函数void fs_init(void);。这里的记录就直接附截图了,还是自己手动配置一下记忆更深。' t' t; t! H2 W: P& z6 z % l- y0 A8 X0 B
; X5 Z4 `( D& H& A
( k$ f6 y1 I7 W4 W# u) {4 p/ F
3.文件系统测试 在上一章节记录的基础上面将按钮控件,替换称为一个带图片背景色的按钮。 7 `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
. I. F6 w% t3 Q main函数修改; ]0 @/ Y& a+ x1 l7 X, u6 v) _" S
1 @: i4 x2 g* P$ u$ p% J 实际效果。; N2 B, i4 Q" y ' t- Q5 {) a& i! @" F7 y# ~: v
$ l2 G$ J8 P9 Q' I7 R; Y) x3 E 4.LVGL模拟器加载本地图片 打开建立的LVGL模拟器启动文件* L2 r) ^$ a" j# T
1 l0 x% F) G- `/ b 修改lv_conf.h中 2 e1 _4 W& d3 [/ w' ^, k+ _5 R3 f 在这里一定要把LV_COLOR_DEPTH定义为16,在前面我们转换的图片输出格式是Bin_565,按默认的LV_COLOR_DEPTH定义为32,是显示不出来图片的。 # ]' g }9 g+ y1 u5 w 定义FS卷标为0跟KEIL中的一样,可以方便程序移植。 #define LV_USE_FS_WIN32 '0' /*Uses CreateFile, ReadFile, etc*/5 G. t6 |$ ?! }- y
( 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
& e2 r) c) A5 N 修改 #define LV_FS_WIN32_LETTER '0' // 卷标 #define LV_FS_WIN32_PATH "image/" // 文件相对路径 ( Q5 F: I0 C N* ~ #define LV_FS_WIN32_CACHE_SIZE 4*512 // 读取文件缓存大小 6 E# N2 p0 E7 p1 V8 m c
在main函数中添加以下函数并运行。这里面的main函数内容其实与KEIL中的main函数差不多。 , P. d2 _/ H4 _. ^1 K5 f
运行效果。
; v& B# m5 s' I* a7 z 5.总结2 U$ N) |( O, z( Z* a+ W* T 到这里差不多是把LVGL驱动配置完成了,我在移植配置KEIL工程和VS LVGL模拟器时可以看到两个工程引用的的lv_conf.h文件其实不是一个文件,在配置两个文件的路径时要重点注意。 在运行编译运行LVGL模拟器时,有时候模拟器并不会报错,但是会报错LVGL.Simulator.exe无法运行,这个时候需要将KEIL_LVGL\Simulator\Output\Binaries\Debug\x64文件夹下面的两个文件删除掉就行。这个问题暂时还没有发现是在哪里引入的BUG。 8 f- @4 I% N3 p/ _5 ^% K
这个移植是一学习记录的过程,自己踩过的坑不想再重复一次,也给大家一个参考,免的浪费时间自己摸索。8 I: o9 c$ q7 t+ I {6 K2 } 2 v) g6 g9 Q2 [ KEIL工程和visual studio模拟器工程其实可以通过合理的创建公共文件,实现模拟器调试后可以直接在keil中编译下载,这个在后面再谈论一下。 k/ z5 j. @! g6 G0 d$ e 为避免大家在我这里浪费时间,我这里先讲一下我会记录一下什么。0 x3 k0 V' q0 s$ Q3 P 2 r& h% r4 \: R; A, }, [ 首先的像按钮、列表、线条之类的单个控件的运用我这里是不会记录的,像LVGL官网、百问网等网站上面有好多高质量的介绍,我是肯定没那些大佬讲解的仔细的,我这里就直接用了,大家有需要的可以直接去那些网站学习。 . J" F7 B! N$ P" M! E/ p% R 主要是记录一些控件的组合使用,大多是搭配具体的工程,还有就是一些比较晦涩的运用、调试过程遇到的一些坑。近期会学习记录页面管理器,页面之间的联动之类的运用,后期会做一个开发板专门用来学习LVGL,大家如果感觉今后会用得到的话,不妨先三连支持一下。, g, c2 y& Q) @+ Y% p2 ?/ t/ M 9 \$ K4 m( ~+ A( w4 j 作者:鹰头猫咪喵喵鱼 |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版