你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32将 framebuffer 保存为图片来检查内容

[复制链接]
STMCU小助手 发布时间:2023-6-18 10:26
1. 前言
0 F  o0 ~: c* D) @客户在做 GUI 项目开发时,会碰到许多显示相关的问题。而屏幕花屏是比较严重的问题,如果产品出现花屏,会严重影响使用体验。正常的 UI 显示,包括画图和将帧缓冲传输到屏幕两个过程。如果画图过程出错,那帧缓冲的内容就不对了,传输到屏幕后显示也不对。而如果画图过程正确,而传输过程出错,虽然帧缓冲的内容是对的,而屏幕接收到的数据出错了,那屏幕显示的内容自然也是错误的。因此在定位显示错乱、花屏等问题时,需要先判断是画图出错还是传输过程出错。本文会介绍一种方法,将帧缓冲内容导出并保存为图片,来判断帧缓冲内容是否正确。
  ?1 L3 |0 Y. J+ ^由于帧缓冲的内容为全部像素的 RGB 数据,在导出后需要借助其它工具将 RGB 数据转换为图片,方便在 PC 上直接查看。这里可以使用 python 的 pillow 包,将 RGB 转换为JPG 图片。而读取帧缓冲的过程可以借助 python 的 pyswd 包来实现。 本机环境:Windows10 64bit
! \6 l8 J2 @% d1 b安装 python 3.9.0 (测试过 3.9.6 正常),检查系统环境变量,将 python 添加到 Path中。
) {/ _& q% o$ C# y- g& Y
: A4 q( S/ [7 S图1.设置环境变量, b: Q( ~7 f% W6 V4 K
Z3PW0JX6T}0GU_842(IJC52.png : N2 P$ u2 |8 b4 e

, n# t/ `; ]5 t0 w) ~' L! `$ Y: M( { / d. g& @" z2 Z$ f4 T& C
3. 将帧缓冲保存为图片; y6 C; G, R" J8 A0 s# s3 D
3.1. 读取帧缓冲
( c$ u; ]2 t  C: A% H& E6 `通过 pyswd,可以创建 stlink 对象连接到目标板,用 read_mem 函数来读取目标板内存。" S8 ?8 y, |+ P+ m) \: H
3.2. 保存图片
7 [# U* R* N  r从 Pillow 包导入 Image 类,创建图片对象,将 pyswd 读取的 framebuffer 数据填充到 image 对象中并保存实现代码如下,保存为 pyswd_rgb2jpg.py 文件。
. l) w/ f) f% p+ [
0 a/ n* Y  e2 U

4 x6 c: ^8 H$ G2 y. Y/ O7 Z& Q
  1. #!/usr/bin/env python/ z5 g, q1 Z5 m5 R4 a
  2. # pyswd_rgb2jpg.py fb_addr width hight bpp output_name
    " T* |, n+ C" j! W' M$ s
  3. # pyswd_rgb2jpg.py 0x20000090 390 390 3 abc.jpg: y3 P. E9 A& q  [9 s3 Z3 x
  4. import swd
    ( H3 E5 \3 ]0 Q4 k4 h: j! i
  5. from PIL import Image7 y9 O  p. G- f: R+ o
  6. #from io import BytesIO
    ) ?9 P& j  P4 w, i  f# e
  7. import sys
    * H( l4 s6 ~! Z1 n
  8. w = int(sys.argv[2]) #390& D" v' H3 \1 d2 v! X
  9. h = int(sys.argv[3]) #390: t$ ^; F* X* [- L/ Y
  10. bpp = int(sys.argv[4]); Z8 D, N* M* H& z# M2 z* y$ o) I
  11. size = w * h * bpp #RGB565/RGB8886 @5 h9 b) E& _) h( O9 k
  12. fb_addr = int(sys.argv[1], 16) #hex3 X7 c  j% e' c+ {3 e
  13. dev = swd.Stlink(swd_frequency=1800000, logger=None)
    & f' `. u# s$ O& A# a$ t
  14. im_data = dev.read_mem(fb_addr, size)
    & o" `7 e0 z8 _5 |4 d- [" R: `- w
  15. im_list = list(im_data)
    ) X4 t: g) I1 Z4 _( X
  16. ## test rgb565.dta file, RGB offset = 164 c% l! R: B, ]( g; h
  17. ## pyswd_rgb2jpg.py rgb565.dta 100 100 2 rgb565.jpg; W3 a5 U9 h. g, Y
  18. #with open(sys.argv[1], 'rb') as f:
    ' q, d/ i& k1 g
  19. # f.seek(16)
    5 L' C& y; o+ H9 ^$ I4 x
  20. # data = f.read()( h3 A' k. ~# s* U
  21. # #print(data)& u+ |1 Y  `' @, E8 A! j+ U
  22. #im_list = list(data)
    ! Z, N, s( f& X! W) o
  23. im = Image.new("RGB", (w, h))1 F8 A7 A* y& e5 O- }
  24. if bpp == 3:4 _7 {" i# e5 |( |4 a  N1 Z6 {) r
  25. for j in range(0, h):
    - S* Y$ H$ c' d5 \# v# K
  26. for i in range(0, w):% \: [% n$ |( @0 h
  27. im.putpixel((i, j), (im_list[(w*j + i)*bpp + 2], im_list[(w*j + i)*bpp + 1], im_list[(w*j + i)*bpp]))
    ! q* i2 v, H' ]* m3 a* ~; [
  28. elif bpp == 2:
    9 @, v) L) H, \
  29. for j in range(0, h):
    ; v# b' e, I5 K& d$ Y& r, ]
  30. for i in range(0, w):: L! `0 v- R9 V) r/ F+ l
  31. r = im_list[(w*j + i)*bpp + 1] >> 3
    7 o# C- p" N; q" _3 t
  32. g = ((im_list[(w*j + i)*bpp + 1] & 0x07) << 3) | (im_list[(w*j + i)*bpp] >> 5)
    ! i% j' {+ v2 W( t* z( `+ ~
  33. b = im_list[(w*j + i)*bpp] & 0x1f9 E6 ]' e  s/ |1 W: H' S* R3 W( |
  34. r = round((r * 255) / 31.0)' Y8 ~! k9 \, K/ L: {# [# A
  35. g = round((g * 255) / 63.0)8 x* s5 e7 {: E+ j- r% `# |
  36. b = round((b * 255) / 31.0)
    , r2 @, X) N2 A. C5 o$ [
  37. im.putpixel((i, j), (r, g, b))
    ' U# v  Q0 \/ `1 L% `& S; G$ V
  38. #print("%02x %02x %02x" %(r, g, b))% a& B& N; N9 o' [
  39. else:
    4 w. K2 ~( r9 @/ M4 I& p- R
  40. print("bpp error")
    & |3 K5 I3 ^3 j) t- n3 m8 N
  41. im.save(sys.argv[5])
复制代码
& e2 e1 [3 f' U$ a# t- k
完整版请查看:附件
+ m1 H; O4 H& |2 y) b' ~5 `/ p
1 H% L8 s% N5 n9 }% y( Y! C1 k9 d5 z 将framebuffer保存成图片来检查其内容是否正常_v1.0.pdf (450.27 KB, 下载次数: 2)
收藏 评论1 发布时间:2023-6-18 10:26

举报

1个回答
STMWoodData 回答时间:2023-6-19 17:16:52

学习学习

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版