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

开源GUI LittlevGL 移植  

[复制链接]
creep 发布时间:2017-9-7 22:39
本帖最后由 creep 于 2018-1-13 19:14 编辑 ( {, W9 A5 {$ x% r( p
& d1 O3 H6 c% f) R
    推荐阅读最新的Littlevgl移植(更新时间:2018-1-13):
) i1 S' s0 E+ f; J& B  " I- D5 }" Q- ~# B/ R) }+ h4 H
    开源GUI  LittlevGL  V5.0版本移植      
4 x, x1 F& _; P$ k' P0 ^5 E

8 S5 W" M3 f( P

" V$ ?1 W6 x! L: [$ iLittlevGL 是一个开源免费的GUI,支持触摸屏操作,移植简单方便,开发者一直在不断完善更新。LittlevGL 自带了丰富的控件:窗口、按键、标签、list、图表等,还可以自定义控件;支持很多特效:透明、阴影、自动显示隐藏滚动条、界面切换动画、图标打开关闭动画、平滑的拖拽控件、分层显示、反锯齿等等。
% Z# R! g7 Y3 P: m0 C
" C( `3 C& y$ ]
" ]9 j! R/ R  T+ z8 x" b9 V6 {
下面是我在STM32F769-DISCO上移植的演示模式的效果图片.

0 F7 d/ V8 r  {# F! Z( R1 A% C. v# R6 _; J0 R6 f
/ e/ l: {1 g, M6 {! t

1 a$ S# T6 A! S$ A2 \0 u TIM图片20170907220239.jpg TIM图片20170907220247.jpg ; y' {( x5 m+ Z5 t4 u; x
' K. F/ @7 R$ {) {& [
主要控件可以通过下面的图片有个基本的了解:, t! i$ ?+ o9 Z2 t1 p7 M+ X
: c$ O+ F; n4 X

6 E4 j' i. ?& I2 C! W5 ? 2017-09-06_115730.png 2 U5 Y, s# E9 n6 [3 E( X$ ?
1、移植
' q- M4 h+ Q' z& B
' R, r# i/ `" @' }/ wLittlevGL 的移植非常简单,用户只需要提供systick、触摸屏、LCD显示接口即可。源码里面有3个文件用于分别添加这3个接口,具体如下:

5 u( l5 f: S& G. J. K 0895ef3e-bcca-43d2-9e1d-7a9a21b4723e.png
( B; p# R& y: f+ y0 s% R7 z& K2 x, p2 z3 F1 v. E
也就是下面几个函数:
/ z' S+ K* Z' \0 R2 `0 m. P  P
, x' B3 h% V1 p, ?
8 _- Q' q7 D/ V
  • hal/disp disp_fill(x1, y1, x2, y2, color) to fill area with a color
  • hal/disp disp_map(x1, y1, x2, y2, &color_array) copy a color map to an area
  • hal/disp disp_color_cpy(dest, src, length, opa) copy pixel, optional for GPU
  • hal/indev indev_get(id, &x, &y) get the x and y coordinates from an input device (e.g. touch pad)
  • hal/systick systick_get() get a system tick with 1 ms resolution
  • hal/systick systick_elapse(prev_time) get the elapsed milliseconds sience prev_time

  • 4 j  b/ x* ?: o8 ]: w$ \
a)systick的移植直接使用的是HAL库里面提供的1 t" `5 i& ^  Q* N% ~, ?* I

. E- o5 t5 `# Q) H
  1. /**
    ; n' |: W7 O3 ]8 v. x
  2. * Get the elapsed milliseconds since start up7 d: i( S8 a* ]1 n
  3. * @return the elapsed milliseconds0 E9 v4 c, I9 [& H
  4. */0 G9 Y  C9 _+ A0 a+ f5 W
  5. uint32_t systick_get(void)8 x7 t! j1 v: f+ t3 O4 t
  6. {
    2 @" L$ w% a$ B* U% ^. x  l
  7.         return HAL_GetTick();8 X$ S5 t( o7 [1 ~1 f+ ~
  8. }
    1 _8 `4 h2 _! Q. S
  9. /**
    / M5 w8 l0 ~5 ^3 L' N0 W8 u
  10. * Get the elapsed milliseconds science a previous time stamp
    # g6 |. a1 S! z4 O* S
  11. * @param prev_tick a previous time stamp from 'systick_get'$ @) h/ l6 ~5 N' w8 I" P6 Q. r& s
  12. * @return the elapsed milliseconds since 'prev_tick'
    2 P( H: z+ h! d; U4 P& Y0 z; ^
  13. */: ?& V5 ~) W4 F5 e
  14. uint32_t systick_elaps(uint32_t prev_tick)
    , Q; O8 X0 j) k- l# n. |% Y" [
  15. {
    / U9 h! l1 K3 _' |, Z! a% \
  16.         volatile uint32_t act_time = systick_get();, {4 E% n) K" Z4 e2 x
  17. ) R; n" O1 Y8 t: }9 A
  18.         /*If there is no overflow in sys_time! W' S) s2 T' u1 x- o. Q/ G
  19.          simple subtract*/: w: ?* c3 i! J2 \
  20.         if(act_time >= prev_tick) {! @6 E, a1 B( Y4 y
  21.                 prev_tick = act_time - prev_tick;9 b: ]6 z% i3 O/ Q
  22.         } else {: B; P0 S6 W* O' K% e( {3 o$ O
  23.                 prev_tick = UINT32_MAX - prev_tick + 1;
      H% d# `! C5 ]3 F( C8 M
  24.                 prev_tick += act_time;7 j; c0 N( X. P5 Q
  25.         }( M- f# x! A9 o8 m7 c: s4 P: b- p
  26.         return prev_tick;& d  ?* q# d5 o4 ^- ]0 `1 c3 [
  27. }
复制代码
b)提供触摸屏的函数,用于初始化触摸屏和返回触摸屏扫描结果4 W: C: z5 F7 L
  1. /**
    : t  b0 L3 X4 g7 A2 F
  2. * Initialize your input devices here6 u# x8 Z7 G, F
  3. */
    - l  }0 @  G  Y+ ^% s
  4. void indev_init(void)
    ( h/ i1 t; P+ M! N2 p3 X8 D
  5. {1 k$ }; S7 Q! W4 R
  6.   BSP_TS_Init(DISP_HOR_RES, DISP_VER_RES);
    - U# }5 u5 c! e/ o$ S
  7. }5 W+ }6 K% G  d5 r& `% b
  8. 7 M# ]* g' L7 q4 q# F0 O
  9. /**
    " m, h. N1 J6 I6 ]; B5 g
  10. * Read an input device
    1 H8 _; @- N/ H' x
  11. * @param indev_id id of the input device to read' Z% ^) g& G. A" K) O1 i- _# n
  12. * @param x put the x coordinate here
    3 \0 q" r) v3 @( x2 X
  13. * @param y put the y coordinate here8 r/ X- t( {& f" H1 s. c# h3 j
  14. * @return true: the device is pressed, false: released2 ]7 l; |4 m& t  y6 t$ M# M1 v
  15. */3 \" W1 ?* @" `' @4 b8 O
  16. bool indev_get(uint8_t indev_id, int16_t * x, int16_t * y)% v/ d; {& U  }( u/ X4 J6 d
  17. {
    " L0 |5 S4 F* I  r5 a3 T3 K7 k5 [
  18.         if(indev_id != 0) {: Q7 R2 J. }/ \% [' m/ r" ~
  19.                 *x = 0;
    6 {% a+ c9 A2 B  @
  20.                 *y = 0;# S9 g0 g4 P) Z2 |; m0 t; \
  21.                 return false;
    " ^; F( K, u3 \( C  |* h
  22.         }
    : R$ J5 c1 X+ `, J/ j$ W& _6 P
  23.         static int16_t last_x = 0;
    2 m. ^: T% u# e+ P
  24.         static int16_t last_y = 0;4 d6 n" U: d- v
  25.         bool press;  m  I2 A, m4 d# F# p
  26.         BSP_TS_GetState(&TS_State);
    ! V& `* x8 l/ N5 r, |
  27.         if(TS_State.touchDetected != 0) {, r  q( A- h- \2 k, S
  28.                 *x = TS_State.touchX[0];
    ) p5 P" T" @" J0 s- F3 v# u
  29.                 *y = TS_State.touchY[0];; o  F7 M. z5 k1 K! M
  30.                 press = true;
    3 ^, ], }* t) e8 @- s5 L2 w
  31.         } else {
    . G% e+ v7 Q  N; M1 N
  32.                 *x = last_x;4 z2 s' D! s- _  _7 t, H) p' m
  33.                 *y = last_y;
    : W) x  o* B( E' k
  34.                 press = false;
    1 u5 x% w" ], @6 |
  35.         }' p# f+ c/ E; t8 r; H; h
  36. 7 O5 T0 Y* C5 ^$ U
  37.         return press;
    . l4 y/ Q' \' _1 V, ?* w
  38. }
复制代码
c)LCD的移植分为几个函数,
# q" T5 j- T5 T3 S, j& A: @3 E7 w+ K! j
1)一个是用单一色填充矩形区域,这个实际调用的次数较小

; C5 v: f% O2 q* s
. B7 y9 V4 p* v; T6 ]" e: H
  1. /**
    * x6 B7 J) O/ ^$ O. N
  2. * Fill a rectangular area with a color# M! O* g. S3 l5 B" f. Z1 H
  3. * @param x1 left coordinate of the rectangle
    6 W1 C4 t. F( y" }
  4. * @param x2 right coordinate of the rectangle
    + t4 l1 s5 R$ H5 Z8 g& a
  5. * @param y1 top coordinate of the rectangle7 [2 s0 v- Q  d# J0 ~7 l
  6. * @param y2 bottom coordinate of the rectangle
    . [' b$ y9 y' t  n
  7. * @param color fill color
    & I1 B1 [( d1 k
  8. */
    ' c1 D/ h8 n3 s! l
  9. void disp_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, color_t color)1 r* X1 }5 H3 K2 p1 i! ^4 D
  10. {
      Y: a. S' ~0 b5 b6 |9 z
  11.     /*Return if the area is out the screen*/
    4 J+ V7 F! e9 `
  12.     if(x2 < 0) return;
    ! u% }* @, }8 r* u  X# M
  13. 8 N# m; Q. p: O2 e/ Z, I. Y% a
  14.     if(y2 < 0) return;
    , \6 B6 F5 @  ^2 A  e

  15. . L3 m0 u$ F0 [) {* m: n
  16.     if(x1 > DISP_HOR_RES - 1) return;6 O# P: C/ x; o, O3 B( [

  17. ) G( G# t+ G* n: F% F5 @6 y
  18.     if(y1 > DISP_VER_RES - 1) return;
    3 e; w" D/ s8 `
  19.   g3 }8 X+ }; ^, d
  20.     /*Truncate the area to the screen*/6 ^7 _- r% F6 [
  21.     int32_t act_x1 = x1 < 0 ? 0 : x1;2 T  c" {& r  Y; P! a" W0 P8 s  p
  22.     int32_t act_y1 = y1 < 0 ? 0 : y1;8 Y0 {$ h- _0 e  B
  23.     int32_t act_x2 = x2 > DISP_HOR_RES - 1 ? DISP_HOR_RES - 1 : x2;
    ) Y; F- K- C* Z
  24.     int32_t act_y2 = y2 > DISP_VER_RES - 1 ? DISP_VER_RES - 1 : y2;4 c! j5 i* H/ s* P
  25. & h# F( X% R% v
  26.     LCD_FillRectPart(act_x1, act_y1, act_x2 - act_x1 + 1, act_y2 - act_y1 + 1, ((color.full)));
    : ]) f- H7 @2 Z0 h- M6 Y& F8 m8 T
  27. }
复制代码
2)这个是用一个颜色map填充一个矩形区域,这个主要用显示时局部刷新使用,是LCD显示调用的底层接口,使用非常频繁,如果需要优先显示速度,可以从这个函数入手,使用块内存复制或者DMA2D来实现。' V9 h9 y. \* U/ U1 H
  1. /**
    4 p: `( S. {# b
  2. * Put a color map to a rectangular area
    9 ~' A& X3 X! P6 R: W& E2 t
  3. * @param x1 left coordinate of the rectangle- ^# T/ l: P# L  E& n+ q
  4. * @param x2 right coordinate of the rectangle/ k4 e# r4 W5 B3 m, Y
  5. * @param y1 top coordinate of the rectangle9 W  G$ [# J5 E% {5 h
  6. * @param y2 bottom coordinate of the rectangle9 y( v6 I( T4 v$ H% j9 e( J
  7. * @param color_p pointer to an array of colors$ \1 N9 R8 s  x% L/ K
  8. */
    ( s9 q$ N4 \* @1 r
  9. void disp_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const color_t * color_p)
    # H& {: ^1 ?1 e
  10. {
    9 ~$ o2 |% e1 E1 i: U0 I3 H, V
  11.     /*Return if the area is out the screen*/  b8 I8 H$ O1 F  w+ _. B
  12.     if(x2 < 0) return;
    . Z" P' o7 F' W$ l
  13. 5 O9 d6 x0 i/ \% K, m
  14.     if(y2 < 0) return;
    2 }( S2 y) C% D" z, c; T: G

  15. ( m' u( h& h/ Z& g5 E: J/ E
  16.     if(x1 > DISP_HOR_RES - 1) return;2 d, o5 j) V# Z. y* s) Y
  17. / m  M; t! v* f4 f6 z: D9 m
  18.     if(y1 > DISP_VER_RES - 1) return;
    0 K( J, ^- u5 E- E
  19. 9 T  ~7 j2 W9 V- }
  20.     /*Truncate the area to the screen*// A* L. Q, w- S- Y* @6 L# t
  21.     int32_t act_x1 = x1 < 0 ? 0 : x1;' \8 b$ k0 q* F
  22.     int32_t act_y1 = y1 < 0 ? 0 : y1;4 U/ p* V& k6 q9 S8 Y
  23.     int32_t act_x2 = x2 > DISP_HOR_RES - 1 ? DISP_HOR_RES - 1 : x2;
    9 F2 l' b6 n2 C$ y5 w  [5 ]' D
  24.     int32_t act_y2 = y2 > DISP_VER_RES - 1 ? DISP_VER_RES - 1 : y2;! [. T: p9 ~3 O8 d1 X  \
  25. ! S6 H, h) O  f" M3 f1 F0 w

  26. 9 P8 _5 K% }# B5 g; S' B& u
  27.     uint32_t y;! ?. P5 F; V1 J3 ~

  28. : Z9 E1 H5 W6 H
  29.     for(y = act_y1; y <= act_y2; y++)( i4 R* m$ A/ ?/ \6 S
  30.     {
    ' Y! K, f; P) {. B+ U. J) Y, t  Q; Y- S
  31.         memcpy(&my_fb[y * DISP_HOR_RES + act_x1],8 k: {2 m, u5 e- m1 C
  32.                color_p,
    3 e% z/ Z: @# t  ]7 N" e+ l! Q) t
  33.                (act_x2 - act_x1 + 1) * sizeof(my_fb[0]));7 y; o! j7 {2 B8 X' ]0 O
  34.         color_p += x2 - x1 + 1;    /*Skip the parts out of the screen*/* z1 ^/ k$ r8 h1 W' @# B" f5 [% |% y! M' r
  35.     }
    8 y" V( g* \  y. q  W) [
  36. % k6 G9 G9 P# ^: R
  37. }
复制代码
3)硬件加速可选项打开后可以使用下面的函数复制加速填充复制内存: R) s% K# _* m
  1. /**
    ( h" u. R5 k' }- j) J; v1 e
  2. * Copy pixels to destination memory using opacity
    9 V, W  w( v( W# ]9 B" Y* d  L
  3. * @param dest a memory address. Copy 'src' here.
    # D) H, R7 t9 b
  4. * @param src pointer to pixel map. Copy it to 'dest'., l5 |' _9 g6 \
  5. * @param length number of pixels in 'src'
    , X. l6 f, V- i9 o
  6. * @param opa opacity (0, OPA_TRANSP: transparent ... 255, OPA_COVER, fully cover)
    ! m8 E" f  Q3 |) w
  7. */
    $ P; }; z% j0 Y
  8. void disp_color_cpy(color_t * dest, const color_t * src, uint32_t length, opa_t opa)
    , b0 D1 v( J9 ]+ M3 {
  9. {
    - E2 Q6 j  |% k: j$ i* d
  10.     /*Wait for the previous operation*/4 Q" G5 V/ e3 g/ l! X8 q
  11.     HAL_DMA2D_PollForTransfer(&Dma2dHandle, 100);
    , [6 j- a# x: U2 d& Q
  12. % g) |* I( s0 f; D( u
  13.     Dma2dHandle.LayerCfg[1].InputAlpha = opa;
    " c  X( {. i" ^3 @
  14.     HAL_DMA2D_ConfigLayer(&Dma2dHandle, 1);
    3 ^9 V: V7 F( P. U# V
  15.     HAL_DMA2D_BlendingStart(&Dma2dHandle, (uint32_t) src, (uint32_t) dest, (uint32_t)dest, length, 1);- Z( D0 N% N. b6 k
  16. }
复制代码
移植了上面接口之后基本问题就不大了,littlevgl 目前的代码结构有点乱,分为core、hal、misc 几个部分,我是分别建立一个文件夹然后把相应的文件全部添加到里面了,官网也没有详细的移植说明文档。所有的源码如下:
. e, G) Y0 f! u* }- U 830d99b5-4b7a-45d6-bdbc-e56085de3ef1.png 1 e8 n; O$ q/ T+ Z$ L
添加到工程中后如下整体如下:% ^& |* f4 @3 A* O1 M: B

3 ~1 ]8 b! |& x" `. ?4 U+ Z
9 A" C1 p- o9 V. C: ^1 ?

) s5 Q/ C' H: ?7 F# M  F" D 3446ef89-270c-4dd3-8658-84f3ba39c9c6.png & R9 }8 w- g; u) ?, ~! @) @
  ^3 D0 K9 }9 R
将所有的文件添加到工程中后用keil编译可能会有一些错误和警告出现,但都很好解决。- p+ D7 A/ K7 U3 {5 r! B0 Q

3 P( h' ]& b# }" h( K5 `
4 e. h3 Q2 ^/ @3 T; S4 s* |; d0 v0 F
2、运行效果* P) k. d' B: t( h6 l
' C$ ]! m5 Y9 E+ d5 G# ]
LittlevGL内置一个类似桌面系统的演示例子,通过打开相应的宏定义即可
- G# U0 m6 R9 T8 ]9 }4 O  o
6 _$ f) T) Q9 r9 A  a$ o; E
! O& E1 m+ }' ]1 T9 k1 m9 z
6b77cfc1-d927-422c-9a91-f5f6b01ed4d7.png
1 x7 G5 w7 v; r& O- _% e8 F
2 l1 k; N& X& [' ^) ?LittlevGL有个桌面上模拟的工程,下面是论坛网友 @QianFan  在linux下运行官方例子的运行效果:
0 y9 \8 l' L: h; B  ^7 j5 D$ i+ t; e
: b* K7 _/ Q3 d; G6 W
X$SK81@USA577AHK@1B@E_C.gif 1 n4 Q) W& T" S+ o4 C

  B3 a/ U9 C# ~; l( o除此之外官网还有一个在STM32F429-DISOC上移植的例子,在youtube上可以观看,因为转换为了gif可能看起来不是很流畅,实际演示效果很不错。
+ D) ?9 m- \6 @3 T4 J
- W* @* d2 I& v5 K

$ M7 \# t% J* w! ^8 k test1.gif
, [( [- J8 a8 Z$ }
3 [- D0 w- d( O下面是我在STM32F769-DISOC上面的移植,和linux下模拟运行的差不多。因为769-disco的分辨率很高,移植后我没有使用优化,所以可以看到画面切换有些闪烁。
5 B6 q& i8 ]" Z  o6 Y
IMG_0253.GIF
6 h8 {2 S: j7 {7 `) \2 |) t1 M. G) W. t# h9 [3 c* _
3、关于LittlevGL2 P* Q: }* T3 ?- k, e) {5 I

& ~& ]5 J' B6 Q  [    LittlevGL里面有个简单的时间片调度系统,刷新显示和触摸处理等任务会周期的被调用处理。LCD刷新采用了局部缓存刷新,这样能避免闪烁出现。LittlevGL目前只有一个开发者在业余时间维护更新,但是开发者热情很高,可以在github上看到更新很频繁,我测试的使用的V4.2版本,开发者正在开发4.3版本并加入了不少新的功能,有建议可以在github和作者讨论互动。$ F' w# W- p. o( I+ j+ d
目前代码结构看上去有点乱,有人在也提到了这个问题,计划好像是在5.0版本引入新的代码组织结构,感兴趣的可以去github提意见,开发者很乐意沟通讨论。官网也有不少控件的使用介绍和例子参考。' y; Y+ {9 o( ]* E" ^  H4 g9 o
" z* n! G) C4 V/ m# `3 `' r( Q/ x. k/ m
1 t! l: ]7 A+ R: b9 c' j& t# n0 {

3 `! u; K  g2 a& ?/ m4 U& B+ R) h+ p 9360da2f-c19f-499f-950b-613fb29b2857.png 9 P  }9 w# v/ m& s' G
. l( @9 G, n2 X, a

" Z  _$ H$ x9 P+ I官网和github地址如下:2 n$ o' S' {: X0 G
8 j( V5 ~1 p3 h6 |" [( o
LittlevGL官网:http://www.gl.littlev.hu/8 X$ f, b1 v, o; y' L! T$ f
LittlevGLgithub :http://github.com/littlevgl   和  http://github.com/littlevgl/lvgl" U3 w+ \9 p) T7 E4 ?4 B9 `% N/ f% C

/ T3 M9 h# c' B' }下面2个视频是在PC Simulator (Linux)和F4-DICO上的移植演示可能需要科学的方式才能打开。$ t- _1 v! g9 u  f, A- P: p
How to Run Littlev Graphics Library in PC Simulator (Linux):http://youtu.be/ZzLdct2ymvg+ y$ Z1 t% |6 I; t# g
Embedded GUI on STM32 Discovery with Littlev Free Graphics Library:http://youtu.be/DcJdK137WKM
( ]' n6 {1 H+ R6 D
; Q6 k6 A9 m/ `+ F  和众多开源的RTOS不一样,目前GUI开源的不是很多,虽然很多商用的GUI也很炫酷,但是我们没法知道具体效果的实现细节,也没法学习到这种能力,LittlevGL目前实现的一些特性和控件我认为是开源的GUI里面水平非常高的了。但是目前LittlevGL资料不是很多,只能通过阅读源码去学习和研究。1 J- x% I5 B' v

' i* p" _% p: e: c
# @$ F7 r- M* M3 {7 Z/ ~5 k测试代码:
, h9 b5 F' c; W  x" |6 l
LittlevGL-STM32F769-DISCO.rar (4.72 MB, 下载次数: 867)

评分

参与人数 2 ST金币 +21 收起 理由
mcbot + 1 little VGL群,526465246 大家一起来学习.
zero99 + 20 大佬玩的好溜

查看全部评分

赞 收藏 12 评论37 发布时间:2017-9-7 22:39

举报

37个回答
creep 最优答案 回答时间:2018-12-2 17:03:42
ioremap 发表于 2018-11-30 17:25' b2 q! z! `  h+ F1 x- P; U
我遇到个大问题,求回复,空间没颜色的

' x& _4 b! F1 F8 W9 P  j2 h看到一个别人分享的开源中文教程。
) C1 a# l- S7 [! `; ]2 P 开源GUI-littevGL应用教程 V0.1.pdf (3.14 MB, 下载次数: 497)
creep 回答时间:2017-9-8 14:53:07
ljt8015 发表于 2017-9-8 13:47
/ f. n, k; M8 n' u7 a( BLittlevGL有个桌面上模拟的工程,下面是论坛网友 @QianFan  在linux下运行官方例子的运行效果:
# P: O3 R2 m5 h6 l7 o) j; B
http://github.com/littlevgl/proj_pc
7 m! a# l* H5 ~
creep 回答时间:2018-7-23 18:11:44
chen849928055 发表于 2018-7-23 16:103 V+ @" E. f; S& h. s
版主Littlevgl移植 没有硬件mcu的限制吧,只要mcu的ram,rom等硬件条件符合要求,就能跑起Littlevgl吧 ...
% @( }( [1 ?( K+ x9 H" S) N7 a
是的,没有限制,移植吧。
Paderboy 回答时间:2017-9-7 23:33:35
跟着大佬学习。。。
淡定的H羊 回答时间:2017-9-8 07:34:07
wow。感觉真不错
7 o! l3 ]+ x9 K# i谢谢楼主分享
@乔木 回答时间:2017-9-8 08:02:24
厉害厉害
qianfan 回答时间:2017-9-8 08:48:53
现在的代码有点乱,图形界面依赖其他的misc,HAL等库。在github中提意见,将gui部分确实需要的部分集成到gui中,其余没用的部分剥离出去。
anobodykey 回答时间:2017-9-8 08:53:59
这个不错,赞一个
MrJiu 回答时间:2017-9-8 09:22:45
已经关注了一波。。。可以看看!!!!
Xinfeng 回答时间:2017-9-8 09:23:21
学习新知识,快乐
ljt8015 回答时间:2017-9-8 13:47:08
LittlevGL有个桌面上模拟的工程,下面是论坛网友 @QianFan  在linux下运行官方例子的运行效果:8 Z$ A; L2 z/ o% Z
' i' T- N7 ]) [* \" D1 \. W1 l

( U+ K, x* z/ V如何模拟?  如何在linux中运行?2 G1 `3 v1 B, z4 O) v1 a

9 N' V. Y% ~  N( h% E7 @0 U
ljt8015 回答时间:2017-9-8 14:30:15
LittlevGL 相比 ucgui 的优势?, w9 g2 O4 p9 j/ g# Q0 D- x' S& U7 l

. q8 g# A4 S4 s, O4 h
ljt8015 回答时间:2017-9-8 14:51:50
8 H3 z/ I+ G. ]2 E
文档很少) L) k7 `( a% [. P2 F; r

! ^( r8 \8 ~, U7 K# O: X
creep 回答时间:2017-9-8 14:54:15
ljt8015 发表于 2017-9-8 14:51& S- z- b6 F, h/ A
文档很少

: n: |1 G% d2 E文档是很少,只能通过看代码学习了,如果感兴趣的话可以一起讨论。
Veiko 回答时间:2017-9-8 16:41:52
感谢楼主,这个很好
freeelectron 回答时间:2017-9-8 17:07:53
好6啊
123下一页

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版