0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将framebuffer保存为图片来检查内容正确性

STM32单片机 来源:STM32单片机 作者:STM32单片机 2022-04-25 10:46 次阅读

1、前言

客户在做 GUI 项目开发时,会碰到许多显示相关的问题。

屏幕花屏是比较严重的问题,如果产品出现花屏,会严重影响使用体验。正常的 UI 显示,包括画图和将帧缓冲传输到屏幕两个过程。如果画图过程出错,那帧缓冲的内容就不对了,传输到屏幕后显示也不可能正确。如果画图过程正确,而传输过程出错,虽然帧缓冲的内容是对的,而屏幕接收到的数据出错了,那屏幕显示的内容自然也是错误的。因此在定位显示错乱、花屏等问题时,需要先判断是画图出错还是传输过程出错。

本文会介绍一种方法,将帧缓冲内容导出并保存为图片,来判断帧缓冲内容是否正确。由于帧缓冲的内容为全部像素的 RGB 数据,在导出后需要借助其它工具将 RGB 数据转换为图片,方便在 PC 上直接查看。

这里可以使用 pythonpillow 包,将 RGB 转换为JPG 图片。而读取帧缓冲的过程可以借助 python 的 pyswd 包来实现。

2、环境安装

本机环境:Windows10 64bit 安装 python 3.9.0 (测试过 3.9.6 正常),检查系统环境变量,将 python 添加到 Path中。

下载:https://www.python.org/downloads/

ec3f427c-c3d1-11ec-bce3-dac502259ad0.png

2.1. 安装 libusb

下载:https://github.com/libusb/libusb/releases

解压 libusb-1.0.24.7z,将 VS2019/MS64/dll/libusb-1.0.dll 拷贝到 python 安装目录,与 python.exe 相同目录

2.2. 安装 pyusb

下载:https://pypi.org/project/pyusb/#files

打开 powershell,输入 pip install pyusb-1.2.1-py3-none-any.whl

2.3. 安装 Pillow

下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pil

打开 powershell,输入 pip install Pillow-8.3.1-cp39-cp39-win_amd64.whl

2.4. 安装 pyswd

下载:https://github.com/cortexm/pyswd/releases/tag/v1.0.0

解压 pyswd-1.0.0.zip,打开 powershell,进入 pyswd-1.0.0 目录,输入 pythonsetup.py install

3. 将帧缓冲保存为图片

3.1. 读取帧缓冲

通过 pyswd,可以创建 stlink 对象连接到目标板,用read_mem 函数来读取目标板内存。

3.2. 保存图片

从 Pillow 包导入 Image 类,创建图片对象,将 pyswd 读取的 framebuffer 数据填充到 image 对象中并保存实现代码如下,保存为 pyswd_rgb2jpg.py 文件。

ec540446-c3d1-11ec-bce3-dac502259ad0.png

4、测试及小结

在 L4R9-DK 板上进行了测试

(1) 无 GFXMMU 时,传给脚本的参数,宽和高为实际 LCD 的宽和高将 GUI 固件烧录到开发板后,屏幕正常显示。在工程 map 文件中,找到 framebuffer 地址。打开 powershell,执行 pyswd_rgb2jpg.py:

ec6040f8-c3d1-11ec-bce3-dac502259ad0.png

(2)开启 GFXMMU 时,framebuffer 对应为虚拟地址,传给脚本的参数中,图像的宽度要用GFXMMU 像素宽度

ec7b2332-c3d1-11ec-bce3-dac502259ad0.png

在完成环境安装后,通过此脚本可方便查看 framebuffer 内容。如果出现屏幕花屏的问题,可导出 framebuffer 图片查看。如果画图过程出错,则导出的图片显示也是错误的。反之,如果画图过程正常,则 framebuffer 内容正常,导出的图片也是正常的,这样就需要查一下传输过程导致的显示问题。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87583
  • 图片
    +关注

    关注

    0

    文章

    203

    浏览量

    15789
  • Framebuffer
    +关注

    关注

    0

    文章

    7

    浏览量

    8000

原文标题:工程师笔记|将 framebuffer 保存为图片来检查内容正确性

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RTT使用unicode编码,编译不通过是为什么?

    1、我们为了设备兼容俄语,就需要使用到unicode编码,字符串保存文件保存为unicode编码,但是编译之后出现一大堆错误。 2、编译器使用的是rtthread_studio. 3、我们的编译器不支持unicode编码吗?
    发表于 03-27 08:01

    如何读取TC397中所有必要的内存区域并将内容保存为十六进制文件?

    我正在使用三板上的 TC397 控制器。 控制器已经用一些软件刷新了,但是,不幸的是,该软件的十六进制文件丢失了。 我需要读取TC397中所有必要的内存区域并将内容保存为十六进制文件,以便将来
    发表于 01-25 06:40

    从AD7712读取的数据在C语言中是保存为什么数据类型?

    谁用过AD7712吗,从AD7712读取的数据在C语言中是保存为什么数据类型啊,long int 吗?我用AD7712对波形进行数字化,AD7712输出的数据应该是有正有负的对吧?
    发表于 12-13 09:33

    js将文件流转化文件保存

    Blob对象可以存储不包含任何特定文件格式的数据。 一般情况下,我们需要将文件流转化为Blob对象,然后再将Blob对象保存为文件。我们可以通过以下方法创建Blob对象: var myBlob = new
    的头像 发表于 11-27 16:07 1575次阅读

    在MATLAB中如何保存和加载消息

    保存和加载消息 您可以保存消息并存储内容以供以后使用。 例如从订阅者获取一条新消息。 posedata = receive(posesub, 10 ) 然后使用MATLAB的保存函数将
    的头像 发表于 11-15 15:17 163次阅读

    如何使用python打开和保存图像

    打开和保存图像 要对图像进行压缩,我们首先需要打开图像文件,并保存为一个Image对象。Image对象是PIL库中最基本的类,它表示一个图像,并提供了很多属性和方法来操作图像。 打开图像文件的方法
    的头像 发表于 09-12 17:20 5930次阅读

    为 LVGL 添加截图/截屏功能(lv_100ask_screenshot)

    的屏幕对象(全屏)保存为图片文件:lv_scr_act(),layer_sys(),layer_top() 可以指定的LVGL对象及其子对象截取保存为
    发表于 09-01 10:56

    M051通过检查自定义UID确定IO是否被切换的示例代码

    nuvoton 核 M051系列微处理器提供了一个 UID(唯一识别器) 。 开发者可以通过确定 UID 的正确性以及确保产品不被复制确定应用程序是否继续执行。 简单 UID 识别安全似乎不够, 因而可以
    发表于 08-30 08:51

    通过检查自定义UID确定IO是否被切换的示例代码

    nuvoton 核 M051系列微处理器提供了一个 UID(唯一识别器) 。 开发者可以通过确定 UID 的正确性以及确保产品不被复制确定应用程序是否继续执行。 简单 UID 识别安全似乎不够, 因而可以
    发表于 08-23 06:20

    应急灯检查内容检查标准?

    应急灯检查内容检查标准? 应急灯是重要的消防安全设备之一,主要用于在紧急情况下提供照明和疏散指示。为了确保应急灯的正常工作和可靠性,需要定期进行应急灯检查。下面是应急灯
    的头像 发表于 08-15 10:15 5249次阅读

    AMBA 3 AXI协议检查器用户指南

    您可以协议检查器与任何旨在实现AMBA 3 AXI协议v1.0的接口一起使用。协议检查器中的一系列断言会根据协议检查您测试的接口的行为。 本指南介绍Verilog文件的
    发表于 08-10 06:18

    嵌入式系统存储正确性和压力测试方案

    在嵌入式系统开发测试阶段通常需要对存储进行正确性和压力测试,比如SRAM,DDR等,通常的做法是进行遍历读写,比如写0x55,0xAA,0x00,0xFF,递增值等这些特殊值然后再回读判断是否正确
    的头像 发表于 06-08 10:45 1255次阅读
    嵌入式系统存储<b class='flag-5'>正确性</b>和压力测试方案

    使用SEGGER Linker的完整检查功能

    = FLASH - CRC;应用段放置在APPLICATION区域之后,执行完整检查,并将结果将被放置在CRC区域: place in CRC { integrity check
    发表于 05-18 13:50

    在LPC1857微控制器的电源突然关闭之前,如何在闪存中保存为变量设置的值?

    我想知道在 LPC1857 微控制器的电源突然关闭之前,如何在闪存中保存为变量设置的值。 多谢!
    发表于 05-18 13:22

    labview数据保存为excel文件

    在labview开发中经常用到数据保存的方式,这里分享一个我在使用中的案例,当然了各种方法有很多,这种比较好理解,操作比较简单。 下面上图 使用的时候只需要点击开始接受按钮,再点击记录,再次点击记录
    的头像 发表于 05-16 09:52 4544次阅读
    labview数据<b class='flag-5'>保存为</b>excel文件