如何在STM32中显示外置FLASH存储的图片并解决内存不足问题

  本文使用CubeMx新建工程,使用硬件spi驱动W25Q64和LCD屏幕,本文使用的屏幕为1.54寸240×240屏幕。

本文中使用的MCU为STM32F103C8T6

如何把图片存储在外置FALSH并显示参考我之前的文章

https://blog.csdn.net/nnnzn/article/details/130774716?spm=1001.2014.3001.5501

如图,一张240×240的图片大小达到了115200,如果要显示存储在FLASH中的这张图片,首先要定义一个大小为115200的数组。

 STM32F103C8T6 这颗MCU的内存不足以创建这么大的数组,所以通过以下代码实现分块显示。

u8 Read_data[BLOCK_SIZE];  // 图像数据缓冲区


#define BLOCK_SIZE 480  // 每块的大小,根据RAM容量和需求调整
#define LCD_WIDTH 240    // LCD屏幕宽度
#define LCD_HEIGHT 240   // LCD屏幕高度
#define FLASH_IMAGE_SIZE 115200  // 图像文件的总大小,根据实际大小设置



void DisplayImageChunks(u32 startOffset, u32 endOffset) {
    u32 y = 0;  // 初始化y坐标
    u32 scrollStep = 1;  // 初始化y坐标的滚动步长,根据需要调整
        while (1) {

            // 设置LCD显示区域
            LCD_Address_Set(0, y, LCD_WIDTH, LCD_HEIGHT);

            // 逐步读取并显示当前块
            W25QXX_Read(Read_data, startOffset, BLOCK_SIZE);  // 从Flash内存读取数据
            for (u32 i = 0; i < BLOCK_SIZE; i++) {
                u8 data = Read_data[i];
                LCD_WR_DATA8(data);
            }

            // 更新块的起始位置
            startOffset += BLOCK_SIZE;

            // 增加y坐标以滚动显示
            y += scrollStep;

            // 如果y坐标越界,重置y坐标
            if (y >= LCD_HEIGHT) {
                y = 0;
							break;
            }

            // 在每个块之间添加延时,以稳定滚动显示
            //HAL_Delay(100);  // 根据需要调整延时时长
        }
    }

这里数组的大小定义为了480,scrollStep的值为 数组大小(480)/ 2 /屏幕宽度(240)。注意scrollStep要为整数,数组大小和scrollStep根据实际调整。

 在main函数中调用DisplayImageChunks(),

物联沃分享整理
物联沃-IOTWORD物联网 » 如何在STM32中显示外置FLASH存储的图片并解决内存不足问题

发表评论