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

news2024/11/17 16:37:37

读取SD卡bin文件显示图片

image-20210710130755511
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文件制作

image-20230826121140954

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

image-20230826121248299

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

image-20230826121623825

查看bin文件

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

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

,

将该bin文件放入sd卡中

我这里是放在picture/pic.bin

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

image-20230826122732028

查看串口数据

image-20230826123014829

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

image-20230826123218689

刷写到LCD上

image-20230826123357098

成功显示这里就不贴图了

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

制作800*480 16位的bin文件

image-20230826191121788

image-20230826125004606

一行行刷写

  
 #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);

   
}
		
	}

刷写得到图片如下所示

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

image-20230826191325088

换一张图片试试??

原图如下

刷写上如下

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

image-20230826191924189

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

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

image-20230826192558709

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

image-20230826193046597

刷写显示如下

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

image-20230826193207661

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/933184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础学习正演的数值模拟(含代码)

摘要: 本贴从零开始学习正演的数值模拟方法. 包括相应的偏微分基础、声波方程、雷克子波、均匀速度场的模拟、一般速度场的模拟. 1. 偏微分基础 本小节仅涉及高等数学相关知识, 与领域无关. 1.1 导数 引例: 物体从一维坐标的原点开始移动, 在 t t t 时刻, 它在坐标轴的位置…

汤普森采样(Thompson sampling): 理论支持

目录 一、UCB与TS算法数学原理1、Upper Confidence Bounds 数学原理2、Thompson sampling 数学原理a、TS 基本数据原理1. beta 分布2. 共轭分布与共轭先验3. 采样的编程实现 b、TS 算法流程1. TS算法基础版本2. Batched Thompson Sampling 二、UCB与TS算法的优缺点1、TS算法的优…

Ubuntu释放VMware虚拟磁盘未使用空间

By: Ailson Jack Date: 2023.08.26 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/152.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

基于Java+SpringBoot+Vue前后端分离医院后台管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Spring为什么要专门定义BeanDefinition ,有Class不行吗?

前言 创建一个Java Bean&#xff0c;大概是下面这个流程&#xff1a; 我们写的Java文件&#xff0c;会编译为Class文件&#xff0c;运行程序&#xff0c;类加载器会加载Class文件&#xff0c;放入JVM的方法区&#xff0c;我们就可以愉快的new对象了。 创建一个Spring Bean&am…

项目总结知识点记录(二)

1.拦截器实现验证用户是否登录&#xff1a; 拦截器类&#xff1a;实现HandlerInterception package com.yx.interceptor;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpS…

Mybatis+MybatisPlus拦截器实战之数据的加解密和脱敏

文章目录 一、前言二、拦截器简介三、代码目录结构简介四、核心代码讲解4.1 application.yml文件4.2 自定义注解4.2.1 SensitiveEntity4.2.2 SensitiveData4.2.3 MaskedEntity4.2.4 MaskedField4.2.5 MaskedMethod 4.3 Mybatis-Plus 拦截器数据自动加密4.4 Mybatis 打印完整sql…

7年经验之谈 —— 如何实现高效的Web自动化测试?

随着互联网的快速发展&#xff0c;Web应用程序的重要性也日益凸显。为了保证Web应用程序的质量和稳定性&#xff0c;Web自动化测试成为必不可少的一环。然而&#xff0c;如何实现高效的Web自动化测试却是一个值得探讨的课题。 首先&#xff0c;选择合适的测试工具是关键。市面…

低通滤波器和高通滤波器

应用于图像低通滤波器和高通滤波器的实现 需要用到傅里叶变换 #include <opencv2/opencv.hpp> #include <Eigen> #include <iostream> #include <vector> #include <cmath> #include <complex>#define M_PI 3.14159265358979323846…

五、多表查询-3.4连接查询-联合查询union

一、概述 二、演示 【例】将薪资低于5000的员工&#xff0c;和 年龄大于50岁的 员工全部查询出来 1、查询薪资低于5000的员工 2、查询年龄大于50岁的员工 3、将薪资低于5000的员工&#xff0c;和 年龄大于50岁的 员工全部查询出来&#xff08;把上面两部分的结果集直接合并起…

最新敏感信息和目录收集技术

敏感信息和目录收集 目标域名可能存在较多的敏感目录和文件&#xff0c;这些敏感信息很可能存在目录穿越漏洞、文件上传漏洞&#xff0c;攻击者能通过这些漏洞直接下载网站源码。搜集这些信息对之后的渗透环节有帮助。通常&#xff0c;扫描检测方法有手动搜寻和自动工具查找两…

requestAnimationFrame(RAF)

1、RAF介绍 requestAnimateFrame&#xff08;RAF&#xff09;动画帧&#xff0c;是一个做动画的API。 如果想要一个动画流畅&#xff0c;就需要以60帧/s来更新视图&#xff0c;那么一次视图的更新就是16.67ms。 想要达到上述目标&#xff0c;可以通过setTimeout定时器来手动控…

JSON文件教程之【jsoncpp源码编译】

目录 1 数据下载(jsoncpp源码)2 文件编译内容: JSON文件的读取与保存可以使用jsoncpp库来实现,这里介绍该库的下载及编译方法。 1 数据下载(jsoncpp源码) 数据下载:Github地址 图1 github源码示意图 2 文件编译 2.1 点击Download ZIP,下载源码。 图2 压缩包数据 2.2 将压…

在 macOS 中安装 TensorFlow 1g

tensorflow 需要多大空间 pip install tensorflow pip install tensorflow Looking in indexes: https://pypi.douban.com/simple/ Collecting tensorflowDownloading https://pypi.doubanio.com/packages/1a/c1/9c14df0625836af8ba6628585c6d3c3bf8f1e1101cafa2435eb28a7764…

2022年06月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;公共子序列 我们称序列Z < z1, z2, …, zk >是序列X < x1, x2, …, xm >的子序列当且仅当存在 严格上升 的序列< i1, i2, …, ik >&#xff0c;使得对j 1, 2, … ,k, 有xij zj。比如Z < a, b, f, c > 是X < a, b, c, f, b, …

软考:中级软件设计师:关系代数:中级软件设计师:关系代数,规范化理论函数依赖,它的价值和用途,键,范式,模式分解

软考&#xff1a;中级软件设计师:关系代数 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &…

一篇文章带你彻底了解Java常用的设计模式

文章目录 前言1. 工厂模式使用示例代码优势 2. 单例模式说明使用示例代码优势 3. 原型模式使用示例代码优势 4. 适配器模式使用示例代码优势 5. 观察者模式使用示例代码优势 6. 策略模式使用示例代码优势 7. 装饰者模式使用示例代码优势 8. 模板方法模式使用示例代码优势 总结 …

python-数据可视化-下载数据-CSV文件格式

数据以两种常见格式存储&#xff1a;CSV和JSON CSV文件格式 comma-separated values import csv filename sitka_weather_07-2018_simple.csv with open(filename) as f:reader csv.reader(f)header_row next(reader)print(header_row) # [USW00025333, SITKA AIRPORT, A…

YOLO目标检测——皮肤检测数据集下载分享

数据集点击下载&#xff1a;YOLO皮肤检测数据集Face-Dataset.rar

springboot源码方法

利用LinkedHashSet移除List重复的数据protected final <T> List<T> removeDuplicates(List<T> list) {return new ArrayList<>(new LinkedHashSet<>(list));} SpringFactoriesLoader#loadFactoryNames 加载配置文件