说明:选择BMP解码图片的方式,是因为此方式不需要占用太多的RAM

一、主要参数及版本

MCU:STM32F103ZET6

LCD:2.8寸ILI9341,使用FSMC驱动

SPI FLASH:W25Q64

FATFS:R0.11

STM32Cube:Version 6.3.0

LittleVGL:V8.0.2

GUI Guider:GUI-Guider-1.3.1-GA,此上位机使用的是LVGL V8.0.2

二、基础说明

本文使用STM32 + MSC + FATFS + LVGL + 文件系统 + BMP直接解码SPI FLASH中的图片,显示在LCD上。

USB MSC + FATFS使用STM32Cube直接生成,这里不做介绍,主要以LVGL文件系统的移植和BMP解码移植为主要内容。

1、STM32Cube生成USB MSC和FATFS

2、移植LVGL到项目,并编译正常,版本V8.0.2

GitHub - lvgl/lvgl at v8.0.2

3、上位机UI设计软件采用NXP的GUI Guider

下载链接:

GUI Guider | NXP Semiconductors

三、添加文件系统

下载链接:

https://github.com/lvgl/lv_fs_if

1、将lv_fs_fatfs.c、lv_fs_if.c、lv_fs_if.h添加到项目

2、lv_conf.h修改

在lv_conf.h中添加:

/*File system interface*/
#define LV_USE_FS_IF    1
#if LV_USE_FS_IF
#define LV_FS_IF_FATFS    'U'   //可以自定义
#endif  /*LV_USE_FS_IF*/

下面一步很重要,不添加图片显示不了,默认是1,改为0

#define LV_USE_USER_DATA      0

3、在main.c中添加初始化lv_fs_if_init()

4、修改lv_fs_fatfs.c

修改fs_init()

这一步很重要,确少这一步会导致文件系统用不起来。

/***********************   STATIC FUNCTIONS**********************/FATFS fs; /* Work area (file system object) for logical drives */FRESULT res;//UINT br, bw;   /* File R/W count */BYTE work[_MAX_SS]; /* Work area (larger is better for processing time) */DWORD fre_clust;/* Initialize your Storage device and File system. */static void fs_init(void){/* Initialize the SD card and FatFS itself.* Better to do it in your code to keep this library utouched for easy updating*/res = f_mount(&fs, "U", 1);  //挂载文件系统到W25Q64if (res==FR_NO_FILESYSTEM)          //如果是新芯片还没有文件系统{f_mkfs("U", 0, sizeof(work));}}

四、添加BMP解码

下载链接:

GitHub - lvgl/lv_lib_bmp: BMP decoder library for LVGL

1、将lv_bmp.c、lv_bmp.h添加到项目

2、在main.c中添加初始化lv_bmp_init()

3、在需要使用的时候添加 #include “lv_bmp.h”

五、图片显示

1、在虚拟U盘中添加图片,注意LV_COLOR_DEPTH 16需要与BMP图片一致

2、读取图片

lv_img_set_src(ui->home_language,"U:/image/image.bmp");

注意:如果LCD上显示”No Data”,修改lv_conf.h中#define LV_MEM_SIZE    (16U * 1024U)          /*[bytes]*/ 大小

STM32移植Littlevgl(LVGL)V8.0.2使用文件系统+BMP解码显示外部FLASH中图片相关推荐

  1. 【RTT】移植:LVGL 8.0.2

      开发板:潘多拉开发板   系统版本:v4.0.3   LVGL版本:8.0.2   注:这篇文章就简单记录下编译成功,跑了一个 demo 的过程,至于是否完全移植成功,不确定哈,毕竟 LVGL 还 ...

  2. LVGL加载外部flash上图片

    void loadBitmap(lv_img_dsc_t *image, uint32_t start_addr, uint32_t file_size) {     uint8_t *pbuf;  ...

  3. STM32Cube_FW_F1_V1.0.0固件库学习(四)外部中断 中

    V4.0和V3.5的中断改了挺多,找了很久...小白不容易啊... 在这个函数中有下面这么一段话,具体的配置参数就是最上面宏定义的.可以直接调用HAL_GPIO_Init解决. /*--------- ...

  4. STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件

    文章目录 前言 一.什么是LVGL? 二.先看效果 三.移植前准备工作 1.准备原有工程 2.下载LVGL源码 四.开始移植 1.把源码搬运到工程文件夹里 2.把搬运好的代码添加到keil工程 3.动 ...

  5. LittleVGL (LVGL)干货入门教程四之制作和使用中文汉字字库

    LittleVGL (LVGL)干货入门教程四之制作和使用中文汉字字库 前言: 阅读前,请确保你至少拥有以下条件: 已实现显示API(教程一已实现, 链接:LittleVGL (LVGL)入门教程一之 ...

  6. LittleVGL (LVGL)干货入门教程二之LVGL的输入设备(indev)API对接。

    LittleVGL (LVGL)干货入门教程二之LVGL的输入设备(indev)API对接 前言: 阅读前,请确保你拥有以下条件: 你已经完成"显示API"的移植. 你已经实现了一 ...

  7. STM32移植FatFS文件系统最新版R0.14b

    STM32移植FatFS文件系统 目录 一.前言 二.硬件及软件准备 三.移植FatFS文件到工程文件夹下 四.将移植文件添加到工程中 五.修改"diskio.c"文件 六.配置& ...

  8. STM32移植时printf串口打印中文乱码,mark一下

    STM32移植后,使用printf进行串口打印,中文显示乱码: 移植时是先新建.txt文档,复制完代码后改为.c文件,查找相关资料,得知.c文件为"UTF-8"编码,需要将编码格式 ...

  9. STM32 IAP升级--内部FLASH和外部FLASH两种方式实现

    芯片型号STM32F103RET6,flash大小512K,起始地址0x08000000 一般说STM32内部FLASH就是指主存储器区域 [注]此实验中启动方式设置为复位后从主闪存存储器启动(BOO ...

最新文章

  1. TextView 显示图像+文字的方法
  2. Visual Studio各个版本对应关系
  3. CF1369F-BareLee【博弈论,SG函数】
  4. C/C++中字符串切割(split)
  5. Java设计模式(7)——装饰者模式
  6. 视觉SLAM十四讲_3-李群和李代数
  7. php安装ziparchive扩展,记一次PHP扩展-ZipArchive安装
  8. ofd文件转化成pdf的免费方法
  9. 转速、电流双闭环控制的直流调速系统
  10. Windows7 简体中文旗舰版下载 (MSDN官方发布正式版原版镜像)
  11. rtklib-RINEX文件读取-rinex.c解析(二)
  12. 2021年下半年软考软件设计师真题答案解析
  13. nginx反向代理进行统一鉴权
  14. 黑苹果睡眠重启后死机_iPhone 所有机型“死机/卡机”重启方法
  15. python怎么调用类中的函数_类中的python函数调用
  16. 大数据技术之Hive(四)函数、压缩和存储
  17. prometheus监控告警功能
  18. Eclipse中怎样将java项目转化为web项目?
  19. c语言程序设计第三版杜有福,C语言程序设计习题答案 杜有福
  20. 不定期福利第二期讲王争:羁绊前行的,不是肆虐的狂风,而是内心的迷茫

热门文章

  1. ctfshow-web
  2. 华为5G商用全球首例 深圳地铁车地超宽带通讯
  3. 封装微信小程序提现到零钱
  4. Vue如何支持JSX语法
  5. 三星i718的优缺点
  6. python保存字符串到csv_Python csv字符串到数组
  7. 机器学习笔试题练习(08-04)【4】
  8. 贝叶斯分类器-资源总结
  9. [源码和文档分享]基于JAVA实现简易版泡泡堂小游戏
  10. JS特性检测,检测元素上是否有指定属性或当前浏览器是否支持某元素或某属性