外置FLASH存储的图片,遇到内存不足的显示方法"/>
STM32显示外置FLASH存储的图片,遇到内存不足的显示方法
本文使用CubeMx新建工程,使用硬件spi驱动W25Q64和LCD屏幕,本文使用的屏幕为1.54寸240x240屏幕。
本文中使用的MCU为STM32F103C8T6。
如何把图片存储在外置FALSH并显示参考我之前的文章
=1001.2014.3001.5501
如图,一张240x240的图片大小达到了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(),
更多推荐
STM32显示外置FLASH存储的图片,遇到内存不足的显示方法
发布评论