前言
本章将系统讲解LVGL在嵌入式平台的完整开发流程,分为三大实战阶段:首先完成LVGL基础移植,接着通过DMA加速与源码级优化提升性能,最终结合GUI-Guider进行高效UI设计。我们将以踩坑日记的形式,深入剖析移植过程中的典型问题及解决方案。首篇聚焦LVGL移植环节,详细演示从零搭建图形框架的关键步骤。
本章为拓展篇,使用SDIO读取SD卡,通过FATFS文件系统将SD卡中的图片显示到LCD屏幕。
本章基于前面章节作为拓展,需要确保成功移植LVGL后,再进行本章内容。如果没有移植成功可以参考我以往的其他文章 STM32+HAL库+FreeRTOS移植LVGL(8.3)驱动SPI协议的LCD触摸屏—从点亮到提速之移植篇_lvgl在嵌入式设备上移植-CSDN博客
cubemx 配置
添加SDIO配置,打开中断
Freertos任务需要提供较大内存,否则会导致运行不正常。
修改堆栈大小,生成代码
添加源代码文件(基于正点原子)
FATFS:直接使用正点原子提供的例子,不使用 cubemx 生成,测试时注册文件失败,不知道是什么问题,有懂的大佬欢迎指导一下。(FATFS 版本为R0.12c, cubemx版本为STM32Cube FW_F4 V1.27.1)
LVGL:使用正点原子提供的8.2版本,使用前面章节的8.3版本出现内存不足问题,所以直接使用正点原子的更加方便。
MALLOC:内存管理文件
SDIO:基于正点原子进行修改的SD卡 驱动代码
添加文件到工程
添加文件路径
修改代码:把 SDIO_BUS_WIDE_4B 改为 SDIO_BUS_WIDE_1B
cubemx生成的代码好像是有点问题,否则会初始化失败
修改内部动态内存池的大小,内存池太小会导致图片显示不出来
使用自定义tick源,则不需要多使用一个定时器
LV_COLOR_16_SWAP配置为 1.
打开GIF译码器库
main中添加代码
FREERTOS任务中添加LVGL计时器
修改SD卡中的GIF路径和名称
效果
图像太大比较占内存,如果内存不够则会显示不正常,推荐先用小图片测试。
代码:
gitee: Chenpz/SDcard_TEST_FREERTOS
百度网盘: https://pan.baidu.com/s/10j8OuAICQ4-thbd9GD1wBg?pwd=uyuv 提取码: uyuv