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

【经验分享】STM32H7 ThreadX GUIX窗口任意位置绘制2D图形

[复制链接]
STMCU小助手 发布时间:2022-1-1 21:00
13.1 初学者重要提示- ~! L4 \$ g5 c- b
  本章节教程的3.4小节是重点,对每个函数的使用都进行了说明。! V- s  g3 T, v  V" N0 V4 M  @
13.2 GUIX Studio设置窗口回调; G3 e/ b0 T1 p
GUIX Studio的设置方法与第11章一样,我们这里仅把控件的位置和大小做了调整,腾出来的位置方便2D图形绘制。
8 M, o, i  W* w  j: h
$ C1 Z/ c$ P5 N; v8 N( Y+ i4 g5 F8 ^5 {' I新调整的界面效果如下:
  v/ z3 {7 F' Q/ I: d
$ O+ E6 N6 n. X
69a2ac618f7a07ef093c97d5ebde6653.png
0 D" t, a) U# o8 l

% A1 m: Q9 ~+ d/ k文本控件和按钮控件以外的区域,我们都可以做2D绘制。为了让800*480分辨率显示屏和480*272分辨率显示屏都可以正常显示,我们后面的2D绘制也会在480*272的范围内绘制。9 |) C+ k, h; y3 t: s8 `
( z: E# F: E8 N& j: k# O4 `7 F: Y
下面我们为窗口控件设置一个Draw Function,此功能是窗口的绘图回调函数。在这个回调函数里面,大家可以绘制任意的2D图形。0 \. W5 c" @6 p3 {7 y% P# k4 r; A
$ s# f/ s, g' C# i- w- z2 ]
8047d2e2fc93e46a92a3bbb496e2ec0e.png
+ M& }. q( D2 L9 U" {1 v  D

5 ]3 ]% u+ s0 P1 Y6 G4 P/ B这里为Draw Function设置的回调函数名为_cbWindow0,然后就可以使用GUIX Studio生成新的代码。生成的代码移植到硬件平台的方法看第12章即可。
$ z( ^+ Q' J4 F% H- @/ u/ Q( h
13.3 GUIX的2D绘制实现- g" ~2 R& e* q$ L$ P* `
在GUIX Studio上设置好绘图函数名后,剩下就是在程序里面实现2D绘制,这里把实现方法为大家做个说明。
5 T9 r: P2 f4 `0 `6 M* [+ T8 c7 Y; Z. Z% W0 W& @
13.3.1        了解2D绘制函数
" }2 b! M1 w: L  R5 VGUIX的2D效果绘制主要是通过canvas相关的几个函数实现:
* \' Z6 i' U8 G$ p+ ~) }
# X. u/ A1 T% l+ k6 O) m/ `$ _
efed2fc42c325890b72b18ddc457f87a.png

2 V+ ?4 p2 B8 u1 c4 ~! ^: f+ z' f: F3 v
这里提供的这些函数,大家根据官网手册的参数说明和每个例子后的调用实例使用即可,但要注意调用的一些套路,下面举例时再为大家细说。) y6 N; c8 W6 \4 ]# E0 W9 v/ Z
3 D0 B& L9 J5 Q! ?
13.3.2        了解画笔brush函数
+ N% E. ~: w: [* p/ v, F
画笔函数在context相关的几个API里面:
0 f- f2 M9 c  I: p8 g/ l
8 ?$ d( B% i$ F! S7 ?
cdfd460b2ef117fd3461cb2d3883acce.png

$ k1 W/ W; V( i; V: z1 N0 |- }! z- x) _/ {( R4 I
Brush画笔主要定义了如下参数:
: e8 n7 ]1 }# G! x9 i/ Z3 j- K& V3 Z7 k% U" Y: x" e) `* _# p6 U
  1. typedef struct GX_BRUSH_STRUCT9 z& S# a/ m  W9 S( A: ^
  2. {
    2 @- W2 t1 H: d/ ]$ b5 d
  3.     GX_PIXELMAP *gx_brush_pixelmap;            /* 用于位图       */
    ' z) H! k4 L( [( t" I' e
  4.     GX_FONT     *gx_brush_font;                /* 用于文本字体   */7 y0 W% @0 }8 d/ L0 q* {( ~1 p$ ^
  5.     ULONG        gx_brush_line_pattern;        /* 用于虚线绘制   */1 G2 t; G" ^& j, F6 ~: A" `- `; M0 z
  6.     ULONG        gx_brush_pattern_mask;        /* 用于虚线绘制   */
    3 [' l3 X" f  [) K( |8 Y; \& q
  7.     GX_COLOR     gx_brush_fill_color;          /* 填充颜色值     */
    ; p8 P" P% ^& l2 w0 W: j# I8 I+ x
  8.     GX_COLOR     gx_brush_line_color;          /* 画线颜色值     */2 t# Z# r7 z9 h9 y* Q3 |. M3 U
  9.     UINT         gx_brush_style;               /* 画笔样式       */( J+ l7 K8 _2 O) G3 D9 ?
  10.     GX_VALUE     gx_brush_width;               /* 画笔线宽       */
    / t: G  o2 F8 K, [% z
  11.     UCHAR        gx_brush_alpha;               /* 用于Alpha混合 */8 v9 T) K3 i( n4 z8 @
  12. } GX_BRUSH;
复制代码

: k9 w4 y6 }- w' k% i其中画笔样式成员gx_brush_style涉及到多个参数:
- H1 U9 y/ j. T
. A0 Y. _9 J4 b' n6 P8 s4 N4 {$ ^6 ~
  1. GX_BRUSH_OUTLINE  @" w: C, u8 f5 Z; p+ f
  2. GX_BRUSH_SOLID_FILL
    " r- ?- b# K4 _6 F. u% T
  3. GX_BRUSH_PIXELMAP_FILL$ y& v9 O) H+ m4 W6 _* R
  4. GX_BRUSH_ALIAS
    # C1 ^! L  W1 M# U7 m
  5. GX_BRUSH_SOLID_FILL
    0 Q) s& j+ r2 V
  6. GX_BRUSH_UNDERLINE' v8 U5 \5 y( W7 J
  7. GX_BRUSH_ROUND; q+ K9 {3 j' a0 D
  8. 5 [+ U# |1 \* R& g
  9. GX_CANVAS_SIMPLE/ U4 {& u! J, B  n$ E8 Z
  10. GX_CANVAS_MANAGED/ c1 c6 H/ ?9 ?/ Z/ g( `0 i- l
  11. GX_CANVAS_VISIBLE- O/ y$ Q, a" |
  12. GX_CANVAS_MODIFIED
      @8 ~& ~3 m$ O
  13. GX_CANVAS_COMPOSITE
复制代码
, S4 ~/ G2 T+ Z5 O" X7 B
这里将当前用到的三个样式做个说明:8 o: e, g, x$ f6 U7 N  Y; @% P" B
4 @& b% Y0 D$ k& r% d3 k/ O9 X
  GX_BRUSH_ALIAS
4 R6 k+ c+ m3 D3 v6 `: L; _用于实现画线,椭圆,圆圈,多边形等抗锯齿效果。1 |) E8 N# a5 t& H

4 y! U2 v3 G3 f' }* A) X; z7 Q. H  GX_BRUSH_SOLID_FILL) W9 k, U7 g% x, v) q( S; q! l
用于实现椭圆,圆圈,矩形,多边形等图形的填充效果,如果不使能此选项,绘制的是图形轮廓。# Q" J3 T/ r/ |5 ?" V( ?* o; U
% n( C: B. r( R8 F9 Q1 q
  GX_BRUSH_ROUND
3 |9 |/ [4 `8 U( }: j; B* l; b- K' L, n' |
用于设置画线功能时,将直线两端的截面设置成圆形,默认是方形的。# ^/ T- T( K. d4 T0 O

" g1 i- I1 l- Y13.3.3        窗口里面做2D绘制的基本框架
, b& W5 Q3 D' M& S# ^6 B2 O窗口的Draw Function绘图回调函数实现框架如下,大家在这个框架里面添加自己的2D功能即可:
% i; j5 e0 i  V! Z. m  z, `+ `' M% J' B1 w
  1. VOID _cbWindow0(GX_WINDOW *widget)9 w* W* y7 e/ j, O  H4 K
  2. {: H$ @! x0 \8 a; R
  3.     GX_RECTANGLE drawto;8 H( _4 s5 X& V' K
  4.     GX_CANVAS *mycanvas;     
    - h1 m/ Q5 `  u5 P! f5 g- b# ]
  5. 0 T3 y3 v- _$ \6 ?) _! i
  6.     /* 默认的窗口绘制回调函数,即默认界面效果绘制 */
    , O7 _9 E$ p+ P: h* {+ l2 k
  7.     gx_window_draw(widget);
    / p( U: o3 l  b

  8. , s. x9 y; s$ J; S- R
  9.     /* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */% C: V9 y; }9 m9 J
  10.     gx_utility_rectangle_define(&drawto,
    5 m- z/ x/ ^5 ?: r. G
  11.                                 x0, / k7 W' p8 G3 j! M
  12.                                 y0,
    , r; f7 j' L1 U! U6 `
  13.                                 x1, ) m# \7 u! d2 k
  14.                                 y1);) K" _8 u5 k6 h- P9 e
  15.   C+ v$ n, N* S& b) n- I4 q. O
  16.     /* 返回窗口对应的canvas画布 */
    % M. ~6 V  u6 ~" t) X9 @
  17.     gx_widget_canvas_get(widget, &mycanvas);
    - |9 `( D, D; @; Y9 S+ z4 d

  18. ) C+ j) c7 ]! {) o) e
  19.     /* 在指定的画布上启动绘图。*/
    9 k. @2 G4 g2 r; J! h9 x
  20.     gx_canvas_drawing_initiate(mycanvas, widget, &drawto);3 X+ L( y6 e3 m: Z+ `

  21. 1 z- Q/ G/ J2 L' }; S
  22.     此处添加代码,调用2D函数绘制
    - l1 P% v9 \6 B& Z
  23. , Q( M& Y- ~$ H1 m& I
  24.     /* 绘制完毕,用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用 */
    $ V; }+ z# j* X) r7 B6 L
  25.     gx_canvas_drawing_complete(mycanvas, GX_TRUE);3 z1 I$ E. H. G6 Y: c
  26. }
复制代码
2 g9 X1 ]8 M- n0 Z. D( G  T
这个框架基本是固定的,大家直接调用即可,下面举一个实例来详细说明每个函数的作用。4 J1 q6 Q) ]+ U. K' N

) a, |4 C1 b' u* v( q13.3.4        窗口里面2D绘制实例(重要); ]; w, F9 n/ z. E7 n3 G, p
实例代码如下,本章教程配套例子也是用的这个代码:
3 T- |2 }, X  Q: E% Y) F7 ]9 w# d) A! A# {
  1. /*
    8 p8 l  h+ X, ^7 h8 W5 B
  2. *********************************************************************************************************) b1 B  b. i! L- ]2 t3 i" ~6 W) E
  3. *    函 数 名: _cbWindow0  T8 D& h, J# E3 E2 ~- V
  4. *    功能说明: 窗口回调函数9 H0 x+ l; S* q$ O' W
  5. *    形    参: widget 窗口句柄& [- m: [( X2 \" O3 P
  6. *    返 回 值: 无
    ! \" L% ?7 o1 j
  7. *********************************************************************************************************
    % M- K3 _6 [- L1 N; E. z. I# \" ~- w
  8. */
    4 C  x# X* H* Q5 f4 O) Z2 U* h( ]
  9. VOID _cbWindow0(GX_WINDOW *widget)( e! j0 d8 a  ?9 P4 q0 }
  10. {2 q% i4 l: l  P9 V0 l) E$ L3 i
  11.     GX_RECTANGLE drawto;
    . n6 q$ n  P  U
  12.     GX_RECTANGLE tempdraw;     ) T1 E  f! f  L2 V
  13.     GX_CANVAS *mycanvas;
    4 y1 P) {* y& c( h9 h
  14.     GX_POINT my_polygon[3] = { { 150, 210 }, { 250, 210 }, { 200, 260 } };
    $ h' }, s4 H% ~0 J
  15. . L$ p5 ]9 U' A/ T8 R8 L

  16. / M7 e/ z# e/ N  v, f4 x: E
  17.     /* 默认的窗口绘制回调函数,即默认界面效果绘制 */
    ) [3 v2 P5 o' M, l1 {! L7 i/ @
  18.     gx_window_draw(widget);
    # U$ f& _) L4 k0 F* S7 C
  19. 3 a2 d+ f1 r; m4 v
  20.     /* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */) B% ]: E5 }, _
  21.     gx_utility_rectangle_define(&drawto,
    9 q' L2 I) `, ]' B
  22.                                 10, 5 u' g1 d$ R. d9 }
  23.                                 100,( o4 t5 k0 N* b! M3 K" A& g4 {
  24.                                 400, ) m+ R5 u' ?; C" k( h0 ^* C" y
  25.                                 265);% X/ p. ~' z1 A  f, N& S
  26. 5 q" [$ u4 X, Z
  27.     /* 返回窗口对应的canvas画布 */
    % c3 B6 c$ o- G6 x6 w# F
  28.     gx_widget_canvas_get(widget, &mycanvas);5 M5 w& {* {+ u: @4 ?( |1 n$ E6 z

  29. % N, i, K1 m7 X8 Y
  30.     /* 在指定的画布上启动绘图 */8 W% D  n5 M8 W" z2 B( A) B) A
  31.     gx_canvas_drawing_initiate(mycanvas, widget, &drawto);
    " m* t6 V; _+ `* C! {) R

  32. 4 r9 h7 P& f1 F# h5 E8 C
  33.     /* 设置笔刷画线的颜色值 */' b: h, N- n! _0 K: w
  34.     gx_context_raw_line_color_set(0xffff0000);
    & g9 p) E6 ~/ I9 L, \/ P

  35. # z' r$ [8 D! `% z5 s1 Y
  36.     /* 设置笔刷填充的颜色值 */   
    ) A) |% s! l- u! z5 Y7 y
  37.     gx_context_raw_fill_color_set(0xff00ff00);
    . g+ c8 f4 Q& k* {+ `
  38. + F2 j9 }: w) c) X# n0 S& g  r
  39.     /* 通过GX_BRUSH_SOLID_FILL使能圆圈,矩形,多边形等绘制为填充效果 */
    $ K1 O9 {2 D) a. c: f1 |  r1 h
  40.     gx_context_brush_style_set(GX_BRUSH_SOLID_FILL);
    # y1 k: A) m1 f$ V! L; m2 X5 Y/ s

  41. 7 J+ u- ^" |/ Y: i+ f
  42.     /* 设置笔刷线宽 */  u$ N, u) ]  t- }
  43.     gx_context_brush_width_set(1);
    % x( s: b) K3 ]
  44. 3 p; l) k! n+ C: g* X
  45.     /* 绘制直线 */7 o$ K6 O4 p7 B: x) K
  46.     gx_canvas_line_draw(10, 100, 50, 150);
    4 z0 C4 w9 M$ f

  47. ' l0 C5 P5 w: |* s
  48.     /* 绘制圆圈 */3 b. O* [  C  k( z0 p7 \5 b, N
  49.     gx_canvas_circle_draw(120, 150, 50);
    3 x0 t' u; e4 h" F( J
  50. 5 _2 z# w2 h$ d5 j: K
  51.     /* 绘制椭圆 */
    3 q0 e& X) r; B2 a4 ?! N
  52.     gx_canvas_ellipse_draw(300, 150, 100, 50);, v- N. G7 l* A: h6 P+ u

  53. 6 `8 E  f; `$ A3 r
  54.     /* 绘制多边形 */9 d7 c7 Y2 X8 ?3 z
  55.     gx_canvas_polygon_draw(my_polygon, 3); ' p7 C3 _+ u8 B

  56. ; q# H5 j. N6 {0 z1 o6 e0 k( I
  57.     /* 绘制矩形 */3 D. i# @9 x6 U0 u
  58.     tempdraw.gx_rectangle_left = 30; / @! {' O4 F1 d- c8 y' z
  59.     tempdraw.gx_rectangle_top = 210; $ i3 v9 E2 O" t4 O
  60.     tempdraw.gx_rectangle_right = 100; " A+ y/ `) t0 u3 b
  61.     tempdraw.gx_rectangle_bottom = 260;$ {1 @& H+ f% @+ J  Z
  62.     gx_canvas_rectangle_draw(&tempdraw);
    1 O/ y% r  w6 ]: F0 @) z
  63.   e. G: d! ]7 y$ y7 u6 M3 M% H9 b
  64.     /* 用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用 */2 N1 a  h4 y0 ^
  65.     gx_canvas_drawing_complete(mycanvas, GX_TRUE);( w# m  b  X4 E! d7 ]# n  ]$ h8 R
  66. }
复制代码
' F$ K  f. j' h
  gx_window_draw7 Q3 y( ~4 ?0 h7 ]+ f! o* o+ i$ [
5 e! d4 H5 a& {' S1 `
作为窗口的Draw Function绘图回调函数,此函数用于窗口默认效果的绘制。
6 ?) o; a2 B( X6 p
% X# F3 q+ c% F+ X  gx_utility_rectangle_define/ c: z. L! z7 m+ g* o' X
8 U$ y7 I- I& b4 \' y- {
定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的,此函数的后四个参数是左上角位置和右下角位置。! Q; W3 I) f, A. J, l* k- h

# r! I. Y$ u2 m2 {  gx_widget_canvas_get
5 X! |( |$ e1 F7 C$ }
1 w* [7 k" Q& T5 u3 f4 `) d+ L返回窗口对应的canvas画布。  F2 ?4 `8 V; W* T7 a* G9 r  ^. D

* z5 h$ A3 U4 L& p) M  gx_canvas_drawing_initiate& p0 q" O$ Q& f9 J& x7 V
" a" D- w' H- |) F1 e
在指定的画布上启动绘图。此功能在GUIX内部被延迟绘图算法调用,在需要画布时自动执行更新。 但是允许应用程序绕过延期绘图算法并立即执行。首先调用gx_canvas_drawing_inititate在画布上绘画。然后调用所需的绘图函数,最后调用gx_canvas_drawing_complete即可。6 e! {# ^2 s# S' u

$ e$ s8 {0 g0 S5 P  gx_context_raw_line_color_set. C# ?+ }$ K+ h) }- ?

( F$ n" u' l& @# K5 w设置笔刷画线的颜色值,比如直线,圆圈的轮廓,椭圆的轮廓,矩形的轮廓,多边形的轮廓等都是采用的这个值。注意这个颜色值是32bit的ARGB格式,每个bit代表的含义如下:
8 S( m% W; o9 _" f2 J0 }9 m  f( b9 g) l& k* E. [0 M# I% p: s
75b0550a29f8f3e8fed5735d50e07c82.png

: ?# ]  G: Y6 s3 v6 _# X6 Q# h$ F7 L% x
  gx_context_raw_fill_color_set
1 T$ W2 a" g& `3 Y- |9 r4 j3 |" A: h# a4 X  L
设置笔刷填充的颜色值,比如圆圈填充,椭圆填充,矩形填充,多边形填充等都是采用的这个值。. k/ `0 f- S3 w4 b* L6 v

5 M1 Q( p4 y2 i: _; X2 D. j1 t  gx_context_brush_style_set
3 l* y8 O6 S$ H# U" [& F5 n8 ?: W5 P. K) f9 B1 [5 @
用于设置笔刷的样式,我们这里设置了GX_BRUSH_SOLID_FILL,表示圆圈,矩形,多边形等绘制为填充效果。如果不设置此样式,表示仅显示一个轮廓。这里特别注意一点,各种样式参数可以通过或操作全部执行,比如GX_BRUSH_SOLID_FILL | GX_BRUSH_ALIAS。
# F0 l% O/ h. O. z' T: p1 z/ c, n. b" y3 x: w2 c3 T) m$ g
  gx_context_brush_width_set7 L2 T. b% k( _# \+ Q6 X7 C
6 o- P/ g: l" G+ E8 Z  H
用于设置笔刷线宽,此线宽对直线,圆圈的轮廓,椭圆的轮廓,矩形的轮廓,多边形的轮廓等都起作用。注意,对于这些2D绘制,必须要设置线宽才可以正常显示。
1 M  Z$ a% ~+ H9 O
* d- ]9 x5 a1 }( F' I1 t  gx_canvas_line_draw
9 G4 @5 s4 J" l5 p/ i8 V  m; S4 S, ]: s5 i! W
直线绘制,注意坐标位置是相对于代码中的窗口,而不是相对于gx_utility_rectangle_define定义的矩形区域。& d6 I4 ~% w) ^( j

+ k% y) J+ z9 B2 j* P3 X0 D, A  gx_canvas_circle_draw
1 j$ ^6 ]; C  F( q# @) U2 A$ m2 I8 w3 t% w
圆圈绘制,坐标含义同上。" B. j* G2 x) f! }: d( G
$ _4 {% B9 w5 ?- l
  gx_canvas_ellipse_draw! h4 U9 g0 I+ y8 Z& J) W  g  p6 N
椭圆绘制,坐标含义同上。
1 `6 z0 j; b8 ?' {* |1 B( H6 u4 \5 m7 Y' l8 ^
  gx_canvas_polygon_draw
, @0 ^/ u3 W. z# @8 g1 Y* B9 Z多边形绘制,坐标含义同上。多边形的绘制是把用户设置的几个坐标点依次连接到一起。
! Y# j6 E1 e# e- }
" \) ?( n: b: J, m  gx_canvas_rectangle_draw, U: Q( S' k/ w/ c9 \  T
矩形框绘制,坐标点含义同上。
& `+ _9 [8 Z, _) {  U. q: W: F. R
  gx_canvas_drawing_complete- v% O! z. l9 R/ v9 L) {
用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用。
) j- H. k& h- N8 E" [8 n. v  b8 t. T
" m% s( O" v% ]9 ?针对这个实例,推荐大家设置不同的参数看效果,熟练掌握这些函数的用法,这样用起GUIX也得心应手。4 h) B$ ?% x! u4 F# k
6 q- [$ _" e( i4 d. H6 o0 n4 \2 Y
13.4 实验例程设计框架
  f0 \3 M+ X! a5 r
本章例程的重点是GUIX任务的实现,任务中专门为窗口设置了一个Draw Function绘图回调函数。
  x: Z2 R4 S4 ]# ~4 b! M0 g
7 w. {1 ^% T- ?
b1fb44317c3b844ecc492ccdbcd083c5.png
! v1 N, j. E& c( ?

+ _8 U( U2 B: [% I2 v1 H13.5 实验例程
7 X+ S' I: A. A/ G% {/ w4 g(注,如果是电阻屏,需要做触摸校准,校准方法看本教程附件章节A)
- E/ F! J  _0 V# T0 z$ j) f+ N1 l- c; }' d4 e  ?4 }5 L* n6 x
配套例子:- N# }' K7 x, c7 I, _6 R6 P
( l. m3 v& A- r6 W) ~
本章节配套了如下两个例子供大家移植参考:
# h8 G6 |* p0 v" A4 [: u# i
  D2 \, F1 f. J% s0 c8 H  m9 N0 k  V7-2011_GUIX 2D Draw
) o" R+ B. d* Z& D* S' p" }2 n9 U3 A( S# V, Q( X4 L/ @
GUIX Studio生成的代码在硬件平台实际运行的工程,含有GCC,IAR,MDK AC5和AC6四个版本工程。
8 {, ]0 C# `: Y% x2 h8 M* w' g9 G8 `3 P: x) r3 _% f
  V7-2012_GUIX Studio 2D Draw
% s+ m3 @& {: M9 }+ e- ~
3 n2 K  A5 Y8 HGUIX Studio工程模板,设计界面后,生成的文件可直接添加到MDK,IAR和GCC软件平台使用。
3 a7 D% s; _: F! }
6 b( \3 P% X& ?实验目的:
( N* J! @$ ~. e% q+ E0 A. q! ]) [/ o& H3 I) o
本章主要学习GUIX的2D函数绘制。
8 Z1 z. Q7 {* ~, Q1 j  c' F+ A! B! k+ i5 L6 c  ~  O
实验内容:
2 \6 n* p3 l' j8 `0 w. \$ n+ Z- R( w8 |1 K
共创建了如下几个任务,通过按下按键K1可以通过串口打印任务堆栈使用情况% r" P0 O" Q' \9 L1 m% J0 F3 H# g6 s! ]
App Task Start任务  :启动任务,这里用作BSP驱动包处理。
8 p" ^: U- S% |( O8 p1 `% }: `3 V3 r, K+ J# M! a) N; W
App Task MspPro任务 :消息处理,这里用作浮点数串口打印。
  R" P! S( _$ b" c& A1 |) Y, @5 _, L# x9 g$ ?% H: D5 }3 W' c
App Task UserIF任务 :按键消息处理。
2 u. n4 Z8 W5 c3 O1 e: L
. S2 D/ }% ?, q. h8 ^8 }App Task GUI任务    :GUI应用任务。0 _5 {& m, N% ^
$ o4 Q$ |" H0 d
App Task STAT任务   :统计任务。9 S# D* ?5 Q- x, Y9 S
& @! @: k& x+ _4 ~
App Task IDLE任务   :空闲任务。- |, d/ x4 z& \7 Z0 P% z% G: r

6 V3 U2 [" I/ t$ r' \GUIX System Thread  :GUI系统任务。- g( Z2 M9 c7 u3 f

5 G( I+ `7 X2 p& K# ASystem Timer Thread任务:系统定时器任务。  D( A& p$ U5 _; w6 d

2 E! p6 g2 x* G. d  u( Y2 H' Q实验效果:" G% i' ^: ~4 A- E7 a

1 g3 d. u# q2 M3 }) T) Y# U* n
df5ab427f528c63c7ed28992f6755a5e.png
& W+ A5 K  R2 v; Z! y

. E: W. k$ o# Y, S$ g3 }GUIX Studio的界面设计如下:1 B. h+ Z, {8 v8 z

$ U3 T; y% ~/ S% [, D
7a76db10496f50ba66caf424e57be98a.png

: ^8 y$ V' i2 ~6 ?3 E
% R# b5 l) B- T$ ^# I% E1 ^1 o1 b( Z, \/ {串口打印任务执行情况:( i5 D$ p2 z2 K* g. M3 m% s7 H: w
' d2 C) d! Q- C$ }1 q- y& |
IAR,MDK AC5和AC6工程可以串口打印任务执行情况:按开发板的按键K1可以打印,波特率 115200,数据位 8,奇偶校验位无,停止位 1:
) e7 \" w* g4 d0 n8 U5 a
: U: `7 c& O# _7 S0 A7 `5 l0 b
23aff8d7e272233974ae0a0724000f87.png

: A0 y. k$ s% m/ J& ^; f$ v0 h* _
- B+ o2 f5 h1 oEmbedded Studio(GCC)平台的串口打印是通过其调试组件SEGGER RTT做的串口打印,速度也非常快,打印效果如下:
$ |+ _  M7 F* P1 K) p: g
- D. w- m, w5 |5 M& I
a1fefc15d92464c45718defa1497c837.png

8 L! r: R% r* ?3 h: |& d; l$ Z4 [1 V8 k0 K9 S
展示里面有乱码是因为Embedded Studio不支持中文。
% B- m- k& w+ c3 |& S# M8 {" e
2 p1 b5 H) ^; Q. J7 P13.6 总结
4 L5 {( E5 q" i: c; c8 y本章节主要为大家讲解了GUIX窗口任意位置绘制2D图形,推荐大家设置不同的参数看效果,熟练掌握这些函数的用法,这样用起GUIX也得心应手。# w  t* a* W) ?; W6 K( }
4 W$ A3 ~* f/ i$ C  C: u) _8 J3 E. I! h

; H& \1 P8 [6 _) s* {; `8 \6 g1 c" ?" v9 c  r- P- q
6 F' ^) h$ z( S5 L1 w: U9 Z

( j1 r0 q8 j2 y' z+ x5 k* N' _: q0 i- O+ }
收藏 评论0 发布时间:2022-1-1 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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