STemWin의 Segger사의 emWin을 기반으로 STM32 프로세서에서 보다 쉽게 GUI를 적용하기 위해 사용되는 하이 레벨 그래픽 라이브러리입니다. STemWin은 내부적으로 이미지 조작을 위해 H/W 블록인 Chrome-ART Accelerator(DMA2D)를 사용하여 보다 빠른 이미지 포맷 변환이나 블랜딩 등의 작업을 처리할 수 있습니다.
STemWin의 특징은 아래와 같습니다.
- Rich set of widgets (buttons, checkboxes, calendars, gauges, …)
- Window and overlap manager
- Full set of Development tools: GUIBuilder to create screens, Font converter, simulator, …
- Free professional graphical stack library available in binary form
- Memory-sparing features (memory pool, per band screen creation, refresh only changed portions, …)
- Able to handle many kinds of displays with optimized mechanisms
- Alpha blending, Antialiasing, Cursors
- VNC server to display remotely the display via VNC protocol (based on TCP/IP)
- Raw graphical renderer (Pixels, Shapes, Fonts, …)
STemWin을 사용하여 쉽게 GUI를 작성할 수 있는데 예를 들면 아래 그림과 같이 GUIBuilder를 사용하여 원하는 GUI로 작성된 코드를 프로젝트에 적용하기만 하면 바로 결과물을 확인할 수 있습니다.
GUIBuilder는 STM32Cube_FW_F7_V1.16.1/Middlewares/ST/STemWin/Software에 있으며 실행된 화면은 아래와 같습니다. 툴바의 위젯들을 가져다가 원하는 GUI로 구성하면 됩니다.
위 그림의 GUI를 저장을 하면 FramewinDLG.c가 생성되는데 아래와 같은 코드 형식으로 변환되어 저장됩니다.
/*********************************************************************
* *
* SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications *
* *
**********************************************************************
* *
* C-file generated by: *
* *
* GUI_Builder for emWin version 5.44 *
* Compiled Nov 10 2017, 08:53:57 *
* (c) 2017 Segger Microcontroller GmbH & Co. KG *
* *
**********************************************************************
* *
* Internet: www.segger.com Support: support@segger.com *
* *
**********************************************************************
*/
// USER START (Optionally insert additional includes)
// USER END
#include "DIALOG.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
// USER START (Optionally insert additional defines)
// USER END
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
// USER START (Optionally insert additional static data)
// USER END
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 320, 240, 0, 0x0, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
// USER START (Optionally insert additional static code)
// USER END
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
// USER START (Optionally insert additional variables)
// USER END
switch (pMsg->MsgId) {
// USER START (Optionally insert additional message handling)
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* CreateFramewin
*/
WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
// USER START (Optionally insert additional public code)
// USER END
/*************************** End of file ****************************/
이 파일을 프로젝트에 적용하면 구현한 GUI를 타깃 보드에서 확인해 볼 수 있습니다.
참고로 변환된 코드를 매번 타깃 보드에 다운로드하여 확인하는 작업을 하면 시간도 오래 걸리고 불편합니다.
그래서 Segger사의 홈페이지를 보면 emWin 시뮬레이터를 제공하고 있습니다.
이를 사용하여 타깃 보드에 올리기 전에 먼저 윈도우 PC상에서 시뮬레이션으로 동작을 확인할 수 있는 방법을 제공하고 있습니다. (참고 : emWin 시뮬레이터를 사용하기 위해서는 segger 사이트에 가입을 해야만 다운로드가 가능하며 시뮬레이터를 빌드하기 위해서는 Visual Studio 2019가 필요합니다.)
제가 받은 버전은 SeggerEval_WIN32_MSVC_MinGW_GUI_V618.zip를 다운로드 받았습니다.
압축을 푼 후 Visual Studio로 SimulationTrial.sln 파일을 불러옵니다.
시뮬레이션 프로젝트를 빌드해 보면 무수히 많은 에러가 발생되며 빌드가 되질 않습니다.
이럴 경우 프로젝트의 LINKER->input 옵션을 아래와 같이 변경 후 다시 빌드해 봅니다.
리빌드를 하면 에러 없이 정상적으로 emWin 시뮬레이터가 동작되며 각 종 위젯들의 동작을 확인해 볼 수 있습니다.
시뮬레이터를 사용함으로써 GUI 확인을 위해 타깃 보드에 다운로드하는 시간도 줄일 수 있을 뿐만 아니라 먼저 PC상에서 빠르게 GUI 검토가 가능하여 편리합니다.
'Hardware > STM32' 카테고리의 다른 글
[STM32F746G-DISCO] STemWin 사용하기 (HelloWorld) (0) | 2024.07.13 |
---|---|
[STM32F746G-DISCO] STemWin library 종류 (0) | 2024.07.12 |
STLINK-V3SET 제품 설명 및 사용하기 (0) | 2024.07.11 |
[STM32F746G-DISCO] LIBJPEG 사용하기 (0) | 2024.07.11 |
[STM32F746G-DISCO] STM32Cube Log Utilities Driver 사용하기 (0) | 2024.07.11 |
댓글