读取SD卡图片bin文件显示LCD上

读取SD卡bin文件显示图片

读取SD卡图片bin文件显示LCD上_第1张图片
Coding

环境搭建:

  • 硬件平台:STM32H750XBH6
  • 开发环境:STM32CubeMX V6.8.1+KEIL V5.28.0.0
  • STM32H750固件版本:package V1.11.0
  • 仿真下载驱动:ST-Link

前言:STM32H750XBH6 的flash只有128K,存储图片数组显然是不够的,使用sd卡存储图片的二进制bin文件,读取文件并显示在lcd上,这里不使用硬解码图片,还没有学习到,另外读取sd卡的bin文件还可以做一个简易bootloader,直接sd卡启动是吧,学习这部分还是有必要的

以下分为两个部分进行,

初步实现 :读取sd卡bin文件保存在一个buffer,buffer刷写到LCD上

这里还是使用了flash,过大的bin文件,buffer无法全部放下,先使用一个小图片制作bin文件,能够显示在lcd上成功一大半了

最终实现 :一行行刷写在LCD上,buffer仅需要一行显示像素大小 作为缓冲

800*480 16位色的屏幕,一帧显示需要750K 使用这么大的缓冲区不现实,我的flash才128k

这里仅使用一行buffer作为缓冲,一行行刷,比如我的屏幕800*480 16位色, 刷一行的buffer需要 1600字节,使用到的flash 只占用1k到2k 大小

图片bin文件制作

读取SD卡图片bin文件显示LCD上_第2张图片

我们还可以生成一个.h文件做对比,查看我们生成的bin文件是否对应

读取SD卡图片bin文件显示LCD上_第3张图片

查看看.h文件生成的数组

读取SD卡图片bin文件显示LCD上_第4张图片

查看bin文件

我们使用16进制文件查看,上面的数组保存的是十六进制格式

可以看到是与之一一对应的

读取SD卡图片bin文件显示LCD上_第5张图片

将该bin文件放入sd卡中

我这里是放在picture/pic.bin

读取bin文件验证是否正确读取

image-20230826122732028

查看串口数据

读取SD卡图片bin文件显示LCD上_第6张图片

13*16+6=214 (验证正确)

读取SD卡图片bin文件显示LCD上_第7张图片

刷写到LCD上

读取SD卡图片bin文件显示LCD上_第8张图片

成功显示这里就不贴图了

最终实现 :一行行刷写在LCD上

制作800*480 16位的bin文件

读取SD卡图片bin文件显示LCD上_第9张图片

读取SD卡图片bin文件显示LCD上_第10张图片

一行行刷写

  
 #define BUFFER_SIZE 1600   //800*2
  #define TOTAL_READ 768000  //800*480*2
	

void sd_picture_on_lcd_unit(void)
{
	
	lcd_clear(WHITE);
	lcd_init();
	g_point_color=RED; /*画笔颜色*/ 
	lcd_display_dir(1);		//屏幕显示方向:0竖屏,1横屏
	lcd_clear(WHITE);
	
	mount_sd();/*挂载sd卡*/

    uint8_t buffer[BUFFER_SIZE];
    uint32_t totalBytesRead = 0;

   for (int i = 0; i <= (TOTAL_READ / BUFFER_SIZE); i++) {
    uint32_t bytesReadThisTime = readFileContent("picture/pic01.bin", buffer, BUFFER_SIZE+1, totalBytesRead);

    if (bytesReadThisTime != 1) { // 如果readFileContent返回1,则表示有错误
        totalBytesRead += (bytesReadThisTime);
    } else {
        // 错误处理
        break;
    }
		LCD_DrawBitmap(0, i, 800, 1, (uint16_t*)buffer);

   
}
		
	}

刷写得到图片如下所示

我这就纳闷了,为什么会是这样的,前面部分颜色完全不对,还有哪里来的紫色,我开始考虑是不是某部分数据丢失,多次复位依然是这样的,我把重点转向写的程序,改过去改过来还是没用

换一张图片试试??

原图如下

刷写上如下

这时候想到了问题所在,这里的汉字以及下面的一些图标都没有问题,问题出现在了颜色上,应该是24位图转16位图出现了问题

我使用win自带的画图软件将原图24转为16位的(转换结果如下)

原来如此,这NM跟原图差这么多,刷写在LCD上的颜色与下面不同应该是软件位图转换算法不一致

读取SD卡图片bin文件显示LCD上_第11张图片

既然这样,那我找找16位图吧,实在找不到了,用一个比较简约的24位转16做替代吧

读取SD卡图片bin文件显示LCD上_第12张图片

刷写显示如下

还是能看的(有部分不一致为软件算法导致,可忽略,还是24位真彩显示好啊)

读取SD卡图片bin文件显示LCD上_第13张图片

你可能感兴趣的:(STM32,stm32,c语言)