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

【安富莱STemWin教程】第12章 JEPG图片显示

[复制链接]
baiyongbin2009 发布时间:2015-1-14 17:07
本帖最后由 baiyongbin2009 于 2015-1-14 17:10 编辑
' O4 Y6 @9 i3 t
7 b# j. W6 \1 P4 H2 Q; A
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
第12章      JEPG图片显示
' U7 b/ P/ g2 g1 i6 n
    本期主要讲emWin支持的JPEG图片的显示,官方支持的主要有两种显示方法,一种是从外部存储器读取数据到内部存储器后,再显示图片,这种的显示速度要快些。另一种方法是直接从外部存储器读取数据并显示,这种办法的好处就是不要大的RAM需求,每次读取一些数据显示一次,坏处就是显示速度比较的慢。
    由于官方提供的JPEG的显示方法比较耗RAM,这里将2MB的外部SRAM做为emWin的动态内存。
    12. 1  JPEG图片支持
    12. 2 绘制已经加载到存储器的JPEG图片
    12. 3 绘制无须加载到存储器的JPEG图片
    12. 4 实验总结
  Z$ E9 @5 m5 m' r9 z
12.1  JPEG图片支持
    JPEG(读音为 “jay-peg”)是全彩和灰度图像的标准压缩方法。JPEG用于压缩 “真实世界”的景象、线条画、卡通,其他非现实图像并不是其强项。JPEG会有损耗,意指输出图像与输入图像并不完全相同。因此,如果您必须达到完全相同的输出位,则不能使用JPEG。不过,对于常见的照片图像,可以得到非常好的压缩级别,看不出变化。并且如果您能容忍低质量的图像,则可以实现相当高的压缩级别。
    这里有一点要特别的注意:出于法律原因,不得分发JPEG算术编码变体的代码。JPEG规范的算术编码选项似乎属于归IBM、AT&T和Mitsubishi所有的专利。因此,从法律上讲,如未获得一个或多个许可,则不能使用算术编码。因此,尚未包含对算术编码的支持。(由于算术编码相对于未获专利的Huffman模式仅具有限界收益,因此不太可能有太多实施支持它。)JPEG文件支持不包含提供标准中定义的层次式或无损流程。
12.1.1      JPEG格式图标转换
    某些情况下,将JPEG文件作为C文件添加到项目中非常有用。这时,首先需要将JPEG文件转换为C文件。使用emWin随附的工具Bin2C.exe可完成此任务。这个Bin2C.exe工具在STemWin软件包里面没有,需要到MDK安装目录里面找。下面我们下图JPEG格式的图片转换成C文件。
                12.1.jpg                
l  打开软件加载上面的图片
12.2.jpg
, p4 a/ w0 c0 Z( F0 U; X5 U/ W
l  加载后点击Convert即可,点击后没有任何现象,直接去图片所在的文件夹找即可
12.3.jpg
  X1 D1 P  k9 L
    实际运行代码如下(图片数据就不贴出来了,看本期教程配套的例子)
  1. void MainTask(void)5 y" M' f2 A8 [/ r& h) ]. m+ T) L6 R7 {
  2. {   & H% I9 I2 {7 g
  3.    GUI_Init();
    . e- d8 o2 {% G: y  v* g
  4.    GUI_JPEG_Draw(_ac11, sizeof(_ac11), 0, 0);; M8 `, }' P9 q2 l6 b
  5.     while(1)
    4 q  h1 C' Q! X# l3 O
  6.     {  N; O; m2 P& F8 m/ |( j( ?
  7.        GUI_Delay(100);
    & [$ i+ ]: _& }; P% N) e% u
  8.     }
    7 y: v4 V, @0 k" Q& P  v4 ~
  9. }
复制代码
    实际显示效果如下:
12..4.png

4 S8 z% l+ V4 O9 U12.1.2      JPEG存储器方式显示
    为了区分上面将图片转换为C文件进行显示,这里将JPEG图片存入到外部SD卡等存储器中进行加载显示。
    首先要注意JPEG需要的动态内存大小,一般图片显示不出来往往是因为动态内存不够造成的。JPEG解压缩大约需要33 Kb RAM用于与图像大小无关的解压缩和依赖大小的字节量。RAM要求可按以下方式计算:
        App.大约RAM要求=图像的X大小* 80字节+ 33千字节
    依赖于X大小的量取决于JPEG文件的压缩类型。下表显示了部分示例:
12.5.png
) D( z& M1 P- k! T" R. ?. o2 t+ X" j
    解压缩所需的存储器由emWin存储器管理系统动态分配。绘制JPEG图像后,将释放整个RAM。为了形象说明,下面举一个例子:比如要显示800*480的jpeg大约需要800*80 + 33k = 97k的内存,鉴于这种情况,这里把外部的2MB的SRAM做为动态内存, 使用前记得初始化SRAM,然后就是在GUIconf.c文件里面初始化一下。
    STemWin支持的JPEG函数如下:
12.6.png

# Z+ e  L3 q; s) b9 x$ N  A8 Y
赞 收藏 评论10 发布时间:2015-1-14 17:07

举报

10个回答
baiyongbin2009 回答时间:2015-1-14 17:21:31
12.2  绘制已经加载到存储器的JPEG图片
    将图片加载到存储器后进行显示比较的耗内存,所以这里就使用开发板外置的2MB SRAM做STemWin的动态内存空间,并通过相应的API函数申请动态内存来加载SD卡等外部存储器中的JPEG图片。申请和释放STemWin动态内存的方法如下:
  1. /* 申请一块内存空间 并且将其清零 */
      S( w0 B% d( N6 [- }1 C, Z: }" @
  2. hMem = GUI_ALLOC_AllocZero(100000);5 K; p3 b/ L) N4 Z
  3. /* 将申请到内存的句柄转换成指针类型 */
    # T+ m) Y* B/ V/ z! X( x8 x
  4. _acBuffer2 = GUI_ALLOC_h2p(hMem);( s5 Y8 `( T5 P1 t4 n2 ~' R3 t0 c
  5. /* 释放申请的动态内存  */; B; y6 `5 E9 q
  6. GUI_ALLOC_Free(hMem);
复制代码
    比如我们要显示下面的JPEG格式的图片(800*480分辨率):
12.7.jpg
2 S3 z& P, i4 V/ U
    就可以把这个图片放到SD卡中,然后通过程序把这个图片数据全部的加载到SRAM中,最后在屏上进行显示。这个工程的实现主要分为如下三个部分:
Ø  SRAM和SD卡及其文件系统的初始化
Ø  图片的加载以及显示函数
Ø  主函数
    下面把这三部分详细的讲解下:
l  SRAM和SD卡及其文件系统的初始化,这部分函数与上面第11章的11.2小节一样。
l  图片的加载以及显示函数
  1. /*
    $ C. ^3 Y8 d! s: W
  2. *********************************************************************************************************
    8 U/ |- q! _7 f8 j
  3. *    函 数 名: _ShowJPG
    5 K2 t6 d0 q  T, q! Q1 r
  4. *    功能说明: 显示JPEG图片
    + `% P5 V: u$ f
  5. *    形    参:sFilename 要显示的图片名字) Z9 N- [8 ^7 ~9 i
  6. *    返 回 值: 无, ~7 k1 H( l# S0 t  k1 @
  7. *********************************************************************************************************1 s0 G. y5 e, g! o9 Z/ p- L# o
  8. */
      x$ ]: {7 ^: {/ }) P0 ]
  9. static void _ShowJPG(const char * sFilename)
    # B9 S8 h: }% n2 f+ s% y. p; Q; G6 Z
  10. {- m2 o/ Q' w& h$ u. m% p5 w* Z  e
  11.      GUI_HMEM hMem;  ^( w: r' v$ V* |! M8 C& O
  12.      char *_acBuffer2;
    ! h; ^( D/ `6 X4 Q
  13. ) p* i3 G' e( R/ i# W
  14.      /* 申请一块内存空间 并且将其清零 */                                                               (1)
    & v" s9 Q9 [; ?( v' q/ D2 A
  15.     hMem = GUI_ALLOC_AllocZero(1024*512);
    , |# a" L- L- c
  16.      /* 将申请到内存的句柄转换成指针类型 */
    ; K6 d6 Y! k8 `
  17.      _acBuffer2 = GUI_ALLOC_h2p(hMem);
    ) q8 l- u6 ^2 }, d

  18. ' E6 A$ K: ~3 S, J, {
  19.    
    1 [" J* Z5 g) v! g
  20.      /* 打开文件 */        ; O* @* N) m) G9 v( L2 m1 H3 i, l
  21.      result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);3 M5 r$ b6 ^9 J1 R' k0 U1 |
  22.      if (result != FR_OK)" s, N3 e$ B* G7 K# S# a
  23.      {/ J) G0 q3 _5 d" g5 o8 ^. |0 |
  24.          return;
    2 T3 q( U  v& b
  25.      }( o8 Q9 _7 b) p

  26. 6 m0 c/ I' |0 @/ R1 G
  27.      result = f_read(&file, _acBuffer2, file.fsize, &bw);
    1 h& K& p; {: c! t* C2 `1 n4 T* X
  28.      if (result != FR_OK)  U+ e2 {, }- M$ Z" ]% O
  29.      {
    1 i# K5 c3 \. e# f
  30.          return;- r, ?$ e' k. C3 C7 k1 K
  31.      }
    7 b* T0 t: N5 T4 x

  32. 2 D3 ^6 n) I2 y! h1 {
  33.      GUI_JPEG_GetInfo(_acBuffer2, file.fsize, &JpegInfo);(2)
    ( y; c2 ~/ F, n; Q( }/ ~' a( ~
  34.      GUI_JPEG_Draw(_acBuffer2, (3)
    $ w6 h( e& p  U3 Q8 Y
  35.                      file.fsize,
    8 X% a* M2 R+ W- [* C
  36.                     0,+ N; m# Q. [( U
  37.                     0);
    : s( E+ P, w2 B
  38. ( I% ]% @- r) x; H1 h6 V( E3 ?! j$ G
  39.      GUI_ALLOC_Free(hMem);
    . `4 p1 h- E- [4 ]; i0 |! N
  40.      f_close(&file);
    + M; Q- r+ q- J2 [, |' n+ R, S
  41. }
复制代码
1.     申请一块动态内存,并将JPEG数据加载到动态内存中。
2.     利用已加载到存储器的jpeg文件的相关信息填充GUI_JPEG_INFO结构。
3.     将JPEG图片显示到屏上。
l  主函数
  1. /*
    ( u5 [/ s! U9 W- N1 v& f
  2. *********************************************************************************************************" E' ^0 z5 b+ N& w" u
  3. *    函 数 名: MainTask
    + }& M2 D7 E' L. Y* c! h, z* x
  4. *    功能说明: GUI主函数
    $ o! |5 D( K  i9 C9 @
  5. *    形    参:无
    # ^/ w; R0 p, ~+ k
  6. *    返 回 值: 无
    " i( Y$ a" O0 Q- e9 A4 o9 |" |
  7. *********************************************************************************************************
    . H" Q' G( c8 A  }4 j# j
  8. */
    # B: p4 B) _0 R$ z4 m
  9. void MainTask(void)# B" o6 X8 P0 I# u5 s
  10. {   
    9 s* T8 I, n1 s1 ]/ {6 K" c3 J
  11.      GUI_Init();
    2 }$ d0 l! a8 |0 k
  12. & i- z. j( I" W7 x
  13.      /* 设置皮肤函数 */  n9 \  K/ t. `" h8 H8 T% j& R& ?" \
  14.      PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    ' O) N5 m) ?' t" h+ L: Y' m
  15.      FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);% e* C# `" V1 ]  ^
  16.      PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);+ X1 q. v7 [* ?- D8 f2 x, W- @8 n
  17.      BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
    5 V- {) R1 K* r& K
  18.      CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);9 y+ b( d" F" Z( A; X- K6 v
  19.      DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);4 S# r: R1 ?  u7 @4 b
  20.      SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);) G1 d: d1 t9 _! L
  21.      SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
    . Y* G5 R1 C3 r) r5 O% S
  22.      HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);& F0 R8 g4 H  g2 v
  23.      RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
    7 M- q* z3 o% P; o0 d

  24. * _$ X& J! _# I8 K+ r+ L' M
  25.      while(1)
    $ ^, R- ^/ E0 B) b$ I
  26.      {                 * x. |" m2 G2 e; W2 ?! ~
  27.          _ShowJPG("2.jpg");
    ( c  c9 V, a5 p/ X
  28.      }
    $ N6 @; e6 z2 q! T& E4 \- R
  29. ' p: s; `; F, T
  30. }
复制代码
实际显示效果如下:
12.8.jpg
" O4 `# ~, Z, H) V! E* K8 v3 c
baiyongbin2009 回答时间:2015-1-14 17:23:47
12.3  绘制无需加载到存储器的JPEG图片
    绘制无需加载到存储器的JPEG图片方式可以有效的解决内部动态内存不够的情况,不过缺点也很明显,图片的显示速度很慢。这种方式一般是每次读取一行像素的数据,然后进行显示。这个工程的实现主要分为如下三个部分:
Ø  使用芯片内部的SRAM作为动态内存
Ø  图片的加载以及显示函数
Ø  主函数
    下面把这三部分详细的讲解下:
l  使用芯片外部的SRAM作为动态内存,这部分函数与上面第11章的11.2小节一样,由于jpeg比较的消耗内存,这里和BMP不同也需要使用动态内存。
l  图片的加以及显示函数。
  1. static char _acBuffer[0x2000];' l6 f; V# @; p  ?
  2. GUI_JPEG_INFO JpegInfo;) ]( ?+ ^( _1 {0 Q  C* u3 F: b
  3. 6 D# A- \" b. D) L  T0 e* l; W( M
  4. /*8 s$ x  m# m/ W2 u/ {
  5. *********************************************************************************************************
    2 I% g3 c7 H* g" p$ R; q
  6. *
    * Q9 z8 I" K. I  ]4 |' h  J  p
  7. *       _GetData
    # |, U6 Y: Y1 ~# K/ g
  8. *  E% ?0 J. K  f: e
  9. * Purpose:
    & ^: l0 _$ [7 m* f
  10. *   This routine is called by GUI_JPEG_DrawEx(). The routine is responsible
    , @, ~1 V0 v' {/ q( Z! Y
  11. *   for setting the data pointer to a valid data location with at least
    ) D. {1 @1 `" h5 P" w# Z9 F/ Y" z
  12. *   one valid byte.6 v9 H4 ]7 j. K$ P
  13. *
    5 g) t9 n+ N: k9 s1 e& Z
  14. * Parameters:
    / j( S8 C  U9 F+ u& |
  15. *   p           - Pointer to application defined data.
    4 c2 G( W  X; ?" S( x
  16. *   NumBytesReq - Number of bytes requested., H+ Y+ }, T9 `3 t  c& V
  17. *   ppData      - Pointer to data pointer. This pointer should be set to
    5 A/ @% J; M5 k* ]& X
  18. *                 a valid location.7 I/ s5 S6 w5 Y4 _3 f; Q
  19. *   StartOfFile - If this flag is 1, the data pointer should be set to the9 h0 o) j* r4 T$ T: L8 C& _7 `6 v
  20. *                 beginning of the data stream.% x. u7 n: R( `0 ~. N+ m3 i
  21. *4 p1 _/ B  E' ~: F, {7 N
  22. * Return value:. |, o. d; ~- r& a$ v( `
  23. *   Number of data bytes available.  |" c9 I% n/ k
  24. *********************************************************************************************************
    ) m8 M8 D' c4 y& e
  25. */
    ! D/ M, m# S! K+ g1 t! m. U; u, |
  26. static int _GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off)
    0 y& _# d6 |- T7 o
  27. {
    3 U/ S$ e/ ?1 l& C! J: Q
  28.      static int FileAddress = 0;+ j" U, a, ?; @- J6 {# @
  29.      UINT NumBytesRead;
    ; j$ n7 _6 x# @- z7 v1 i& n0 O
  30.      FIL *PicFile;
    ! F) o# p+ E, F1 E

  31. ! I# I6 P8 I, q; J3 s
  32.      PicFile = (FIL *)p;# }( k; Q( w. d' [. m$ A

  33. . M) F' A0 N* G- Z& i5 z5 o
  34.      /*+ r: O& Q6 F# L
  35.      * Check buffer size2 B8 |# M& X) c+ V) ]0 @
  36.      */. h8 e9 Z% U" m9 h3 l3 s
  37.      if (NumBytesReq > sizeof(_acBuffer)) {/ Z3 o: a+ E+ W! X3 p, ?+ c9 U+ \3 N
  38.      NumBytesReq = sizeof(_acBuffer);1 {  U- R' w; i! G! Q
  39.      }
    % C8 s( }2 B4 D

  40. + \& G4 S4 C$ b6 ]+ B5 ]" D
  41. 2 I: H" ~, W$ ~; b
  42.      /*, x3 A, N9 \  W% y
  43.      * Set file pointer to the required position) z% ]* V) Y; Q% e6 w2 ?8 h$ @
  44.      */) N' Y# _* [: k4 h! i
  45.      if(Off == 1) FileAddress = 0;
    ! R& f( ^+ j' @
  46.      else FileAddress = Off;
    . k3 C& D! V4 D5 L( h% _' p
  47.      result =f_lseek(PicFile, FileAddress);' T* l6 F! z. _) u/ c

  48. * _- _6 G! s# r) N! [/ O- P# A
  49. : h/ T1 g+ Z- g7 g0 n2 `( Z
  50.      /*# N7 U$ \: \& u' U# f# A# c
  51.      * Read data into buffer$ }( l: q. q& k. p
  52.      */
    7 ]# v1 w/ @: U
  53.      result = f_read(PicFile, _acBuffer, NumBytesReq, &NumBytesRead);
    . d! U9 h# z7 u* M0 ?

  54. ; n; ?5 B1 B, c% ]. N: V
  55.      /*
    % B$ N. m2 H: |7 e$ X8 o" e
  56.      * Set data pointer to the beginning of the buffer* u; ~5 t5 l4 A6 d
  57.      */
    , X7 y( Z' N5 u" D! X; B0 b" |
  58.      *ppData = (const U8 *)_acBuffer;$ {6 B3 b% C/ q* p- [1 m

  59. & f8 F* w: Y! u# M
  60.      /** W6 ?& ?1 @9 W+ m& x
  61.      * Return number of available bytes. Y9 [% Y* z8 A& ]0 t9 X
  62.      */. T8 a1 P" p* N
  63.      return NumBytesRead;4 c; V$ n) m; J9 z2 j2 p  d
  64. }
    ; X6 }5 \2 T: p( @

  65. 0 k# {" o2 l$ m) n4 {
  66. /*  A, B( Z! D( l4 a3 v+ m8 f# Y% @
  67. *********************************************************************************************************) _& P: V7 n1 d9 b7 x
  68. *    函 数 名: _ShowBMPEx/ R$ i' O3 L; u) h3 G9 Z* E8 y, S
  69. *    功能说明: 显示BMP图片- O3 }% W7 [! {6 }! h% Z
  70. *    形    参:sFilename 要显示图片的名字
    ) t  n& f2 D) q5 V6 t0 w: Z+ {" G% }
  71. *    返 回 值: 无
    5 R4 j0 `9 l/ @( j
  72. *********************************************************************************************************
    # O, E* e% o' @2 ~! N2 P5 z
  73. */
    . j7 v/ I; m  C2 w" f4 q3 A. l
  74. static void _ShowJPGEx(const char * sFilename)4 x. A! q. y8 I9 q# M" |
  75. {   
    " |9 F0 _: ]- R% z/ n
  76.      OS_ERR err;" a& g6 z, ?2 d! H/ Z7 s: `. L
  77.      uint16_t i;, X. Y6 P, m2 v" P# z
  78. ) z5 X9 J1 X7 F+ Q2 q) `
  79.      /* 打开文件 */        0 Z( o2 K7 R5 i! @' N% Q4 O
  80.      result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);8 M+ f0 t8 _- `; P+ u" N
  81.      if (result != FR_OK)% v+ t5 M) M# o. U$ i- v
  82.      {- K3 G& Q  c% b2 u0 w
  83.          return;
    ; L; r$ L- \& ]9 ^
  84.      }
    " D( |# B! b1 t7 D# Z  g3 t( M8 n
  85.     , n2 C% v2 h* ?  I
  86.      GUI_JPEG_GetInfoEx(_GetData, &file, &JpegInfo);(1)' H: H) }# L6 G( r$ u) [
  87.      while(1)1 {# f4 {0 [9 i4 x( _; r+ m" V  _
  88.      {. C9 O8 E7 X6 [: p; h5 L+ [9 u: a
  89.          /**********必要的时候,可以加上调度锁,防止刷图片的时候死机*************/( c$ F# V5 h$ b
  90.          for(i = 100; i < 1000; i += 10)8 _" m6 S  T; T$ O
  91.          {
    * t; J, t" |  _3 k! s7 S5 ^
  92.               OSSchedLock(&err);
    6 [, G% K- m- W) k
  93.               GUI_JPEG_DrawScaledEx(_GetData, (2)1 V1 y7 w# k0 J3 O/ ^
  94.                                      &file,' M" A* a' t4 G6 B+ z
  95.                                        (LCD_GetXSize() - JpegInfo.XSize*i/100)/2,
    / \  V' i" m( Z: F! A5 _
  96.                                        (LCD_GetYSize() - JpegInfo.YSize*i/100)/2,
    * P) \6 Y( A* k* [) N) R1 J
  97.                                        i,
    * |* n* n0 p& }0 V/ k, L; n: F
  98.                                        100);
    7 c+ r( T2 E& w4 S3 _
  99.               OSSchedUnlock(&err);
    ! m; [% B1 @7 K; C6 A1 O- u% @! J; Q
  100.               GUI_Delay(1000);  . Q. }7 F% Q, p, z6 ^
  101.          }  ^; I* s( w+ V3 w0 o  x) _8 z' D. r

  102. ! f6 x) }/ m! ?6 n* N) @7 T
  103.          GUI_Clear();
    1 Q2 V) p8 r! r7 @
  104.          GUI_Delay(1);! P# Y* [+ k$ x
  105.      }1 ~0 U' T) i1 Y+ i/ D" r

  106. 6 b1 u& I. t/ o' m. d8 ^% N
  107. //   f_close(&file);
      }' }# ]1 f! ~# T0 z
  108. }
复制代码
1.     获取JPEG图片的信息
2.     绘制带放缩比例的JPEG图片。
    实际显示效果如下,这个是放大后的:
12.9.png
3 A. _5 w/ ]9 n# G& N# x
12.4  实验总结
    有兴趣的可以了解一下JPEG压缩方面的知识。如果只是API应用的话,这部分知识还是比较容易学会的。

7 Q& S' f# o$ U. R( m5 K7 |8 v
linlangxiyue 回答时间:2015-1-14 18:42:54
好详细。。学习了。。。
Veiko 回答时间:2015-1-14 19:38:27
很不错,顶一个
党国特派员 回答时间:2015-1-25 20:05:37
1.png
feel-376797 回答时间:2015-1-26 05:18:14

/ g4 i8 n, X3 A) N% _2 \* C$ [9 ~谢谢楼主分享
拼命三郎 回答时间:2015-1-26 08:04:29
stm32.jpg
Dylan疾风闪电 回答时间:2015-1-27 14:45:32
资料好多啊,学习学习
北斗光寒 回答时间:2015-1-27 19:21:43
貌似很给力的样子
wyxy163@126.com 回答时间:2015-1-28 15:10:07
提示: 作者被禁止或删除 内容自动屏蔽
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版