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

【安富莱STemWin教程】第40章 BUTTON-按钮控件

[复制链接]
baiyongbin2009 发布时间:2015-2-28 11:00
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
第40章 BUTTON-按钮控件

    从本期教程开始讲解STemWin支持的控件。现在STemWin支持的控件类似已经非常完善了。利用好这些控件,会让设计的人机界面更加人性化。本期教程先从按钮的设计开始跟大家讲解。
    40. 1 按钮控件介绍
    40. 2 官方WIDGET_SimpleButton实例
    40. 3 官方WIDGET_PhoneButton实例
    40. 4 对话框上使用按钮控件
    40. 5 总结
40.1 按钮控件介绍
    按钮控件默认的显示效果如下:
40.1.png
    开启皮肤后显示效果如下:
40.2.png
40.1.1 按钮支持的通知代码
    以下事件是按钮控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:
消息
描述
WM_NOTIFICATION_CLICKED
按钮已被点击。
WM_NOTIFICATION_RELEASED
按钮已被释放。
WM_NOTIFICATION_MOVED_OUT
按钮已被点击,且指针已移出按钮并且没有释放。
40.1.2 按钮支持键盘反应
    如果控件具有输入焦点,则它将对下列各键做出反应:
按键
反应
GUI_KEY_ENTER
此类键按下后,按钮认为它被按下并立即释放,然后作出相应反应。
GUI_KEY_SPACE
此类键按下后,按钮状态改变为已按下。键释放后,按钮状态改变为未按下。

收藏 评论7 发布时间:2015-2-28 11:00

举报

7个回答
baiyongbin2009 回答时间:2015-2-28 11:01:57
40.2 官方WIDGET_SimpleButton实例
    这个例子就是实现一个简单的按键显示功能。这个例子的位置在:
40.3.png
源代码如下:
  1. #include "GUI.h"
  2. #include "BUTTON.h"

  3. /*******************************************************************
  4. *
  5. * static code
  6. *
  7. ********************************************************************
  8. */
  9. /*******************************************************************
  10. *
  11. * _DemoButton
  12. */
  13. static void _DemoButton(void) {
  14. BUTTON_Handle hButton;(1)

  15. GUI_SetFont(&GUI_Font8x16);
  16. GUI_DispStringHCenterAt("Click on button...", 160, 90);
  17. //
  18. // Create the button and set text
  19. //
  20. hButton = BUTTON_Create(110, 110, 100, 40, GUI_ID_OK, WM_CF_SHOW);(2)
  21. BUTTON_SetText(hButton, "Click me...");(3)
  22. //
  23. // Let window manager handle the button
  24. //
  25. while (GUI_WaitKey() != GUI_ID_OK); (4)
  26. //
  27. // Delete the button
  28. //
  29. BUTTON_Delete(hButton);(5)
  30. GUI_ClearRect(0, 50, 319, 239);
  31. GUI_Delay(1000);
  32. }

  33. /*********************************************************************
  34. *
  35. * Public code
  36. *
  37. **********************************************************************
  38. */
  39. /*********************************************************************
  40. *
  41. * MainTask
  42. */
  43. void MainTask(void) {
  44. GUI_Init();
  45. GUI_SetBkColor(GUI_BLACK);
  46. GUI_Clear();
  47. GUI_SetColor(GUI_WHITE);
  48. GUI_SetFont(&GUI_Font24_ASCII);
  49. GUI_DispStringHCenterAt("WIDGET_SimpleButton - Sample", 160, 5);
  50. while (1) {
  51. _DemoButton();
  52. }
  53. }
复制代码
1. 按钮句柄。
2. 创建一个按钮控件,最后一个参数WM_CF_SHOW表示创建后立即显示,其它参数大家看手册中的介绍即可。
3. 设置按钮上显示的文本。
4. 等待按钮被按下。
5. 删除创建的按钮。
显示效果如下:
40.4.png


baiyongbin2009 回答时间:2015-2-28 11:03:02
40.3 官方WIDGET_PhoneButton实例
    这个例子主要是在按钮上面显示图片,演示一种简单的来电话情景。这个例子所在模拟器中的位置:
40.5.png
源程序如下:
  1. #include "GUI.h"
  2. #include "BUTTON.h"

  3. /*******************************************************************
  4. *
  5. * static variables
  6. *
  7. ********************************************************************
  8. */
  9. /*******************************************************************
  10. *
  11. * Bitmap data, 3 phone logos
  12. */
  13. static const GUI_COLOR Colors[] = { 0x000000, 0xFFFFFF };

  14. static const GUI_LOGPALETTE Palette = { 2, 1, Colors };(1)

  15. static const unsigned char acPhone0[] = {
  16. ________, ________, ________, ________,
  17. ________, ________, ________, ________,
  18. ________, ________, ________, ________,
  19. ________, ________, ________, ________,
  20. ________, ________, ________, ________,
  21. ________, ________, ________, ________,
  22. ________, ________, ________, ________,
  23. ________, ________, ________, ________,
  24. ________, ________, ________, ________,
  25. ________, ________, ________, ________,
  26. ________, ________, ________, ________,
  27. _____XXX, XXXXXXXX, XXXXXXXX, XXX_____,
  28. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  29. __XXXXXX, XXXXXXXX, XXXXXXXX, XXXXXX__,
  30. _XXXXXXX, X_______, _______X, XXXXXXX_,
  31. _XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,
  32. _XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,
  33. _XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,
  34. ________, ___XX___, ___XX___, ________,
  35. _______X, XXXXXXXX, XXXXXXXX, X_______,
  36. ______XX, XXXXXXXX, XXXXXXXX, XX______,
  37. _____XXX, XXXX__X_, _X__XXXX, XXX_____,
  38. ____XXXX, XXXX__X_, _X__XXXX, XXXX____,
  39. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  40. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  41. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  42. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  43. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  44. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  45. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  46. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___
  47. };

  48. static const unsigned char acPhone1[] = {
  49. ________, ________, ________, ________,
  50. ______XX, X_______, ________, ________,
  51. ____XXXX, XXXXX___, ________, ________,
  52. ____XXXX, XXXXXXX_, ________, ________,
  53. ___XXXXX, XXXXXXXX, X_______, ________,
  54. ___XXXXX, XXXXXXXX, XXX_____, ________,
  55. _____XXX, XXXX_XXX, XXXXX___, ________,
  56. _______X, XXXX___X, XXXXXXX_, ________,
  57. ________, _XX_____, _XXXXXXX, X_______,
  58. ________, ________, ___XXXXX, XXX_____,
  59. ________, ________, _____XXX, XXXXX___,
  60. ________, ________, _______X, XXXXXX__,
  61. ________, ________, ________, XXXXXXX_,
  62. ________, ________, ________, XXXXXXX_,
  63. ________, ________, _______X, XXXXXXXX,
  64. ________, ___XX___, ___XX__X, XXXXXXXX,
  65. ________, ___XX___, ___XX___, _XXXXXXX,
  66. ________, ___XX___, ___XX___, ___XXXX_,
  67. ________, ___XX___, ___XX___, _____XX_,
  68. _______X, XXXXXXXX, XXXXXXXX, X_______,
  69. ______XX, XXXXXXXX, XXXXXXXX, XX______,
  70. _____XXX, XXXX__X_, _X__XXXX, XXX_____,
  71. ____XXXX, XXXX__X_, _X__XXXX, XXXX____,
  72. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  73. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  74. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  75. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  76. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  77. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  78. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  79. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___
  80. };

  81. static const unsigned char acPhone2[] = {
  82. ________, ________, ________, ________,
  83. ________, ________, _______X, XX______,
  84. ________, ________, ___XXXXX, XXXX____,
  85. ________, ________, _XXXXXXX, XXXX____,
  86. ________, _______X, XXXXXXXX, XXXXX___,
  87. ________, _____XXX, XXXXXXXX, XXXXX___,
  88. ________, ___XXXXX, XXX_XXXX, XXX_____,
  89. ________, _XXXXXXX, X___XXXX, X_______,
  90. _______X, XXXXXXX_, _____XX_, ________,
  91. _____XXX, XXXXX___, ________, ________,
  92. ___XXXXX, XXX_____, ________, ________,
  93. __XXXXXX, X_______, ________, ________,
  94. _XXXXXXX, ________, ________, ________,
  95. _XXXXXXX, ________, ________, ________,
  96. XXXXXXXX, X_______, ________, ________,
  97. XXXXXXXX, X__XX___, ___XX___, ________,
  98. XXXXXXX_, ___XX___, ___XX___, ________,
  99. _XXXX___, ___XX___, ___XX___, ________,
  100. _XX_____, ___XX___, ___XX___, ________,
  101. _______X, XXXXXXXX, XXXXXXXX, X_______,
  102. ______XX, XXXXXXXX, XXXXXXXX, XX______,
  103. _____XXX, XXXX__X_, _X__XXXX, XXX_____,
  104. ____XXXX, XXXX__X_, _X__XXXX, XXXX____,
  105. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  106. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  107. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  108. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  109. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  110. ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
  111. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
  112. ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___
  113. };

  114. static const GUI_BITMAP bm_1bpp_0 = { 32, 31, 4, 1, acPhone0, &Palette}; (2)
  115. static const GUI_BITMAP bm_1bpp_1 = { 32, 31, 4, 1, acPhone1, &Palette};
  116. static const GUI_BITMAP bm_1bpp_2 = { 32, 31, 4, 1, acPhone2, &Palette};

  117. /*******************************************************************
  118. *
  119. * static code
  120. *
  121. ********************************************************************
  122. */
  123. /*******************************************************************
  124. *
  125. * _Wait
  126. */
  127. static int _Wait(int Delay) {(3)
  128. int EndTime;
  129. int r;

  130. r = 1;
  131. EndTime = GUI_GetTime() + Delay;
  132. while (GUI_GetTime() < EndTime) {
  133. GUI_Exec();
  134. if (GUI_GetKey() == GUI_ID_OK) {
  135. r = 0;
  136. break;
  137. }
  138. }
  139. return r;
  140. }

  141. /*******************************************************************
  142. *
  143. * _DemoButton
  144. */
  145. static void _DemoButton(void) {
  146. BUTTON_Handle hButton;

  147. GUI_SetFont(&GUI_Font8x16);
  148. GUI_DispStringHCenterAt("Click on phone button...", 160,80);
  149. GUI_Delay(500);
  150. //
  151. // Create the button and modify its attributes
  152. //
  153. hButton = BUTTON_Create(142, 100, 36, 40, GUI_ID_OK, WM_CF_SHOW);(4)
  154. BUTTON_SetBkColor (hButton, 1, GUI_RED);
  155. //
  156. // Loop until button is pressed
  157. //
  158. while (1) {
  159. BUTTON_SetBitmapEx(hButton, 0, &bm_1bpp_1, 2, 4); (5)
  160. BUTTON_SetBitmapEx(hButton, 1, &bm_1bpp_1, 2, 4);
  161. if (!_Wait(50)) break;
  162. BUTTON_SetBitmapEx(hButton, 0, &bm_1bpp_0, 2, 4);
  163. BUTTON_SetBitmapEx(hButton, 1, &bm_1bpp_0, 2, 4);
  164. if (!_Wait(45)) break;
  165. BUTTON_SetBitmapEx(hButton, 0, &bm_1bpp_2, 2, 4);
  166. BUTTON_SetBitmapEx(hButton, 1, &bm_1bpp_2, 2, 4);
  167. if (!_Wait(50)) break;
  168. BUTTON_SetBitmapEx(hButton, 0, &bm_1bpp_0, 2, 4);
  169. BUTTON_SetBitmapEx(hButton, 1, &bm_1bpp_0, 2, 4);
  170. if (!_Wait(45)) break;
  171. }
  172. BUTTON_SetBitmapEx(hButton, 0, &bm_1bpp_1, 2, 4);
  173. BUTTON_SetBitmapEx(hButton, 1, &bm_1bpp_1, 2, 4);
  174. GUI_ClearRect(0, 80, 319, 120);
  175. GUI_DispStringHCenterAt("You have answered the telephone", 160, 145);
  176. GUI_Delay(2000);
  177. //
  178. // Delete button object
  179. //
  180. BUTTON_Delete(hButton);
  181. GUI_ClearRect(0, 50, 319, 239);
  182. GUI_Delay(400);
  183. }

  184. /*********************************************************************
  185. *
  186. * Public code
  187. *
  188. **********************************************************************
  189. */
  190. /*********************************************************************
  191. *
  192. * MainTask
  193. */
  194. void MainTask(void) {
  195. GUI_Init();
  196. GUI_SetBkColor(GUI_BLACK);
  197. GUI_Clear();
  198. GUI_SetColor(GUI_WHITE);
  199. GUI_SetFont(&GUI_Font24_ASCII);
  200. GUI_DispStringHCenterAt("WIDGET_PhoneButton - Sample", 160, 5);
  201. while (1) {
  202. _DemoButton();
  203. }
  204. }
复制代码
1. 图片数据的调色板。
2. 用于应用函数调用的GUI_BITMAP格式图片数据。
3. 按键时间等待函数,如果超过了设置的等待时间,按钮还没有按下,那么返回1,如果在设置的时间内按下了,返回0.
4. 按钮按下时的背景颜色。
5. 设置按钮按下或者常态时使用的图片。
显示效果如下:
40.6.png


baiyongbin2009 回答时间:2015-2-28 11:04:22
40.4 对话框上使用按钮控件
    通过uCGUIBulder建立一个如下的界面(分辨率480*272):
40.7.png
    同时使能BUTTON0和BUTTON1的三个通知代码消息:
40.8.png
这里我们仅使用按钮的CLICKED消息,通过这两个按钮实现对话框中背景颜色的改变。源代码如下(可以直接的复制到开发板或者模拟器上面运行):
  1. #include <stddef.h>
  2. #include "GUI.h"
  3. #include "DIALOG.h"

  4. #include "WM.h"
  5. #include "BUTTON.h"
  6. #include "CHECKBOX.h"
  7. #include "DROPDOWN.h"
  8. #include "EDIT.h"
  9. #include "FRAMEWIN.h"
  10. #include "LISTBOX.h"
  11. #include "MULTIEDIT.h"
  12. #include "RADIO.h"
  13. #include "SLIDER.h"
  14. #include "TEXT.h"
  15. #include "PROGBAR.h"
  16. #include "SCROLLBAR.h"
  17. #include "LISTVIEW.h"

  18. /*********************************************************************
  19. *
  20. * static data
  21. *
  22. **********************************************************************
  23. */
  24. GUI_COLOR _acColor[3] = {GUI_BLUE,GUI_RED,GUI_YELLOW}; (1)
  25. static char BackColor;

  26. /*********************************************************************
  27. *
  28. * Dialog resource
  29. *
  30. * This table conatins the info required to create the dialog.
  31. * It has been created by ucGUIbuilder.
  32. */

  33. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  34. { FRAMEWIN_CreateIndirect, "armfly", 0, 0, 0, 480,272,FRAMEWIN_CF_MOVEABLE,0},
  35. { BUTTON_CreateIndirect, "BUTTON0", GUI_ID_BUTTON0, 52, 93, 110,30, 0,0},
  36. { BUTTON_CreateIndirect, "BUTTON1", GUI_ID_BUTTON1, 289,90, 117,33, 0,0}
  37. };

  38. /*****************************************************************
  39. ** FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
  40. ** Function: to initialize the Dialog items
  41. **
  42. ** call this function in _cbCallback --> WM_PAINT
  43. *****************************************************************/

  44. void PaintDialog(WM_MESSAGE * pMsg)(2)
  45. {
  46. WM_HWIN hWin = pMsg->hWin;
  47. GUI_SetBkColor(_acColor[BackColor]);
  48. GUI_Clear();
  49. }

  50. /*****************************************************************
  51. ** FunctionName:void InitDialog(WM_MESSAGE * pMsg)
  52. ** Function: to initialize the Dialog items
  53. **
  54. ** call this function in _cbCallback --> WM_INIT_DIALOG
  55. *****************************************************************/

  56. void InitDialog(WM_MESSAGE * pMsg)
  57. {
  58. WM_HWIN hWin = pMsg->hWin;
  59. //
  60. //FRAMEWIN
  61. //
  62. FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
  63. FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
  64. FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
  65. FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
  66. FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
  67. FRAMEWIN_SetTitleHeight(hWin,30);
  68. //
  69. //GUI_ID_BUTTON0
  70. //
  71. BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_Font24B_ASCII); (3)
  72. //
  73. //GUI_ID_BUTTON1
  74. //
  75. BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON1),&GUI_Font24B_ASCII);

  76. /* 默认颜色取*/
  77. BackColor = 0;
  78. }

  79. /*********************************************************************
  80. *
  81. * Dialog callback routine
  82. */
  83. static void _cbCallback(WM_MESSAGE * pMsg)
  84. {
  85. int NCode, Id;
  86. WM_HWIN hWin = pMsg->hWin;
  87. switch (pMsg->MsgId)
  88. {
  89. case WM_PAINT:
  90. PaintDialog(pMsg);
  91. break;
  92. case WM_INIT_DIALOG:
  93. InitDialog(pMsg);
  94. break;
  95. case WM_KEY:
  96. switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
  97. {
  98. case GUI_KEY_ESCAPE:
  99. GUI_EndDialog(hWin, 1);
  100. break;
  101. case GUI_KEY_ENTER:
  102. GUI_EndDialog(hWin, 0);
  103. break;
  104. }
  105. break;
  106. case WM_NOTIFY_PARENT:
  107. Id = WM_GetId(pMsg->hWinSrc);
  108. NCode = pMsg->Data.v;
  109. switch (Id)
  110. {
  111. case GUI_ID_OK:
  112. if(NCode==WM_NOTIFICATION_RELEASED)
  113. GUI_EndDialog(hWin, 0);
  114. break;
  115. case GUI_ID_CANCEL:
  116. if(NCode==WM_NOTIFICATION_RELEASED)
  117. GUI_EndDialog(hWin, 0);
  118. break;
  119. case GUI_ID_BUTTON0:
  120. switch(NCode)
  121. {
  122. case WM_NOTIFICATION_CLICKED:(4)
  123. BackColor++;
  124. if (BackColor == 3)
  125. {
  126. BackColor = 0;
  127. }
  128. WM_InvalidateWindow(hWin);
  129. break;
  130. case WM_NOTIFICATION_RELEASED:

  131. break;
  132. case WM_NOTIFICATION_MOVED_OUT:

  133. break;
  134. }
  135. break;
  136. case GUI_ID_BUTTON1:
  137. switch(NCode)
  138. {
  139. case WM_NOTIFICATION_CLICKED:(5)
  140. BackColor--;
  141. if (BackColor < 0)
  142. {
  143. BackColor = 2;
  144. }
  145. WM_InvalidateWindow(hWin);
  146. break;
  147. case WM_NOTIFICATION_RELEASED:

  148. break;
  149. case WM_NOTIFICATION_MOVED_OUT:

  150. break;
  151. }
  152. break;

  153. }
  154. break;
  155. default:
  156. WM_DefaultProc(pMsg);
  157. }
  158. }

  159. /*********************************************************************
  160. *
  161. * MainTask
  162. *
  163. **********************************************************************
  164. */
  165. void MainTask(void)
  166. {
  167. GUI_Init();
  168. WM_SetDesktopColor(GUI_WHITE); /* Automacally update desktop window */
  169. WM_SetCreateFlags(WM_CF_MEMDEV); /* Use memory devices on all windows to avoid flicker */
  170. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  171. FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  172. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  173. BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
  174. CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
  175. DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
  176. SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
  177. SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
  178. HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
  179. RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
  180. GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);(6)
  181. }
复制代码
1. 对话框用户区可选的三种背景颜色。
2. 对话框回调函数中的重绘消息要执行的函数。
3. 设置按钮的字体。在uCGUIBulder中可以在这里设置:
40.9.png
4. 设置按钮按下后要处理的消息。
5. 同上,处理按钮按下后要处理的消息。
6. 创建阻塞式对话框。
这个程序的实际显示效果如下(480*272分辨率):
40.10.png
40.5 总结
    本期教程主要是跟大家讲解了按钮控件的使用,希望大家可以把本期教程中讲的三个例子都跑跑,然后自己设计一个相关的例子进行试验学习。教程中只是使用了部分的按钮API,其它的API大家都可以试试。

wxh0000mm 回答时间:2015-2-28 12:45:20

好贴,顶上去,都学习下
wambob 回答时间:2015-2-28 13:09:58
标记下,学习
dsjsjf 回答时间:2015-3-1 15:01:56
顶一下      
caiyuhui74748 回答时间:2015-8-18 11:50:22
很详细,mark              

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

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