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

    文章

    7029

    浏览量

    89034
  • 图片
    +关注

    关注

    0

    文章

    203

    浏览量

    15929
  • Framebuffer
    +关注

    关注

    0

    文章

    8

    浏览量

    8064

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

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

收藏 人收藏

    评论

    相关推荐

    根据ADS1292R Data sheet组了一个前端电路,请问要如何测试电路的正确性?

    我根据ADS1292R Data sheet 自己组了一个前端电路,请问要如何测试电路的正确性?
    发表于 12-16 06:27

    ADS1278EVM-PDK连续采集方式保存数据时,能否保存为单个文件?

    ADS1278EVM-PDK请问连续采集方式保存数据时,Ready按后只能保存一系列文件(是不是不断刷新只保存最后一次数据),不能保存单个文件。能否
    发表于 12-02 07:19

    ADCPROADS1278EVM-PDK用ADCPro在连续采集模式下能否保存为1个文件?

    ADCPROADS1278EVM-PDK用ADCPro在连续采集模式下能否保存为1个文件。现在不点亮Ready按钮就只保存最后刷新的数据,如果点亮Ready按钮就保存一系列文件比如以下所示,同样大小系列文件。请问在ADCPr
    发表于 12-02 06:26

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍framebuffer

    Framebuffer 字面意思就是帧缓存的意思,即显存,里面保存着一帧图像。事实上,对于嵌入式系统而言。没有真正意义上的显存,Framebuffer 是通过内存模拟出来的。一、LCD
    发表于 11-21 09:00

    飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍framebuffer

    Framebuffer 字面意思就是帧缓存的意思,即显存,里面保存着一帧图像。事实上,对于嵌入式系统而言。没有真正意义上的显存,Framebuffer 是通过内存模拟出来的。 一、LCD
    发表于 11-20 08:50

    ADS5282如何通过其他方式验证寄存器写入的正确性

    word. 测试结果: (1)差分数据对N端无变化 (2)差分P端输出300多mv电压,差分N端输出100多mv电压 另外,ADS5282是只写芯片,如何通过其他方式验证寄存器写入的正确性
    发表于 11-18 08:33

    如何评估AIGC内容的质量和效果

    : 准确 : 事实核查 :确保AIGC生成的内容与已知的事实和数据相符。 引用来源 :检查内容是否引用了可靠的来源,并且这些引用是否正确
    的头像 发表于 10-25 16:02 770次阅读

    电脑如何直接使用rs232串口控制PGA460?如何检测回复的数据的正确性

    电脑直接使用rs232串口控制PGA460,该怎么连接?怎样检测回复的数据的正确性
    发表于 10-11 06:12

    使用CY521 EVAL配置CYPD2122,如何文件保存为HEX格式?

    我正在使用 CY521 EVAL 配置 CYPD2122。 一切运行正常,我现在希望文件保存为 HEX 格式,以便通过 MiniProg4 进行编程。但是,当我进入\"保存到固件文件
    发表于 08-12 08:19

    在SimpleCentral_processGATTDiscEvent里面,根据UUID发现charHandle,这个charHandle在UUID改为128bit后是否还是保存为8字节?

    SimpleCentral_processGATTDiscEvent里面,根据UUID发现charHandle,这个charHandle在UUID改为128bit后是否还是保存为8字节?还是要保存16字节?若还是保存8字节应该
    发表于 05-30 07:55

    STM32MP135如何使用opencv-python或v4l2-ctl打开摄像头,并保存为图片

    行。 但是官方的例程中,直接用v4l推送到media上,直接显示的又是可以的。 请问我该如何使用opencv-python 或v4l2-ctl打开摄像头,并保存为图片
    发表于 05-30 06:16

    labview屏幕找图,返回找到的位置XY坐标

    CheckSUM值。 图中的截图按钮点击后可截取屏幕上你需要的任意位置,尽量只选择感兴趣的区域,保存为.bmp格式的图片到路径。选择路径后点击找图按钮即可实现找图。也有屏幕找色,OCR,窗口句柄等子vi,感兴趣的私聊。
    发表于 05-11 08:59

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

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

    怎么编写Framebuffer驱动程序

    Framebuffer 驱动程序框架 分为上下两层: fbmem.c:承上启下 实现、注册 file_operations 结构体 把 APP 的调用向下转发到具体的硬件驱动程序
    的头像 发表于 03-22 09:13 565次阅读
    怎么编写<b class='flag-5'>Framebuffer</b>驱动程序

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

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