Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
158 views36 pages

STemWin - Presentation - V1.0

The document discusses STemWin, a graphics library for embedded systems. It can be used to add user interfaces to STM32 microcontrollers. The library provides basic 2D drawing functions and objects as well as a window manager. It aims to simplify graphics development and allows hardware acceleration using the STM32's DMA2D and LCD controller.

Uploaded by

Chayma Ben Zekri
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
158 views36 pages

STemWin - Presentation - V1.0

The document discusses STemWin, a graphics library for embedded systems. It can be used to add user interfaces to STM32 microcontrollers. The library provides basic 2D drawing functions and objects as well as a window manager. It aims to simplify graphics development and allows hardware acceleration using the STM32's DMA2D and LCD controller.

Uploaded by

Chayma Ben Zekri
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

STemWin

Hands-On on STM32F7
Agenda 2

Presentation

Time

10’ Introduction

Graphics on STM32

20’ STemWin

Library presentation

15’ Demo – simple calculator


Introduction
STemWin – UI Development Kit 4

Embedded user interface development made simple

Bitmap Converter

GUI Builder

STM32F756NG
Chrom-ART Accelerator™

ART Accelerator™

Floating Point Unit (FPU)


STemWin
Firmware IDE TFT LCD Controller
Library
Cortex-M7
Graphics on STM32 5

STM32F756 Architecture

Chrom-ART
TFT
Cortex-M7 Accelerator
Controller
(DMA2D)

Bus Matrix

External
Internal Internal
Memory
FLASH SRAM
Controller

• TFT controller allows the interfacing


• Chrom-ART (DMA2D) provides a true HW acceleration
• DMA2D offloads the CPU for operations like rectangle graphic filling,
rectangle copy (with or without pixel format conversion), and image blending
• DMA2D goes faster than the CPU for the equivalent operation
LCD-TFT Display controller
6
(LTDC)
LCD-TFT Controller Architecture 7
LCD Memory Requirements 8

• Frame buffer size


• The panel size and bits per pixel determine the amount of memory needed to hold
the graphic buffer.
• Memory Requirement (KiloBytes) = (bpp * Width * Height) / 8
• In many cases, more memory is needed. E.g. double buffering: one graphic buffer
to store the current image while a second buffer used to prepare the next image.

Required memory
Panel Resolution Total Pixel (K) bpp ( Bit per pixel)
(KB)
76.8 16 153.6
320x240 (QVGA)
8 76.8

480x272 (WQVGA) 130.5 16 216.1

640x480 (VGA) 307.2 16 614.4

800x600 (SVGA) 480 16 960


Chrom-ART Accelerator™ 9

Hardware acceleration for Graphics content creation

How the frame buffer


is generated in order
to creating “cool”
graphical UI to be
displayed through the
TFT controller?
Frame buffer construction (1/3) 10

The frame buffer is generated drawing successively all the graphics


objects

Graphics object type:


• A Bitmap with its own color
coding (different from the final
one), compressed or not
• A Vectorial Description (a line,
a circle with a texture...etc....)
• A Text
Frame buffer construction (2/3) 11

Background

Almost Uniform
L8 mode

Button

Round shape
Gradient
ARGB8888 mode

Icon
Fonts
Complex shape
Many colors Specific management with A8 or A4 mode
ARGB8888 mode
Frame buffer construction (3/3) 12

• To generate the 24bpp frame buffer:


• Copy background from the ROM to the frame buffer with PFC L8 to RGB888
• Copy buttons & icons from the ROM to the frame buffer with blending
• Copy characters from the ROM to the frame buffer with PFC A4 to ARGB8888 and
blending

• Many copy operations with pixel


conversions can be done by the
CPU, but it’s very time
consuming → HW acceleration
helps
Chrom-ART Accelerator™ 13

Overview

• The Chrom-ART combines both a DMA2D and graphic oriented


functionality for image blending and pixel format conversion.

• To offload the CPU of raw data copy, the Chrom-ART is able to copy
a part of a graphic into another part of a graphic, or simply fill a part of
a graphic with a specified color.

• In addition to raw data copy, additional functionality can be added


such as image format conversion or image blending (image mixing
with some transparency).
Typical data flow 14

Chrome-ART
TFT
Cortex-M7 Accelerator
Controller
(DMA2D)

Bus Matrix

External
Internal Internal
Memory
FLASH SRAM
Controller

Creation of an object in a memory device by the Chrom-ART


Update/Creation of the frame buffer in the external RAM by the Chrom-ART
TFT controller data flow
STemWin
Contents 17

• Objectives of the STemWin solution

• Basic 2D library

• PC SW Tools

• Window manager

• Configuration ?
Why STemWin ? 18

Provide a high level graphics library which:

• Is easy to use

• Is flexible to customize

• Provides graphic objects from simple 2D elements to complex window


driven objects

• You can use the ST LTDC and Chrome-ART HW features without


detailed knowledge

• Is the industry standard in embedded field

• Is FREE of charge!
Basic 2D library 19

• With STemWin you can easily draw basic vector objects as


• Lines, rectangles, arcs, polygons, graphs, bitmaps, JPEGs, PNGs and more

• Objects are drawn by a foreground color


• GUI_SetColor(GUI_RED);

• STemWin supports Alpha blending – objects can overlay each other.

• Text and values can be easily written on the screen


Basic 2D library - examples 20

GUI_SetColor(GUI_RED);
GUI_SetDrawMode(GUI_DRAWMODE_NORMAL);
GUI_FillCircle(120, 120, 80);
GUI_SetDrawMode(GUI_DRAWMODE_XOR);
GUI_FillCircle(140, 140, 80);
Basic 2D library - examples 21

GUI_SetBkColor(GUI_YELLOW);
GUI_Clear();
GUI_SetColor(GUI_BLUE);
GUI_SetPenSize(4);
GUI_DrawLine(30, 30, 60, 190);
GUI_DrawLine(30, 190, 60, 30);
GUI_DrawRoundedRect(100, 30, 200, 190, 15);
{
const GUI_POINT aPoints[8] = {
{ 230, 30},{ 240, 100},
{ 310, 110}, { 240, 120},
{ 230, 190}, { 220, 120},
{ 150, 110}, { 220, 100},
};
GUI_FillPolygon(&aPoints, 8, 0, 0);
}
Basic 2D library - examples 22

GUI_DrawPie(100, 100, 50, 0, 60, 0);


GUI_DrawPie(100, 100, 50, 120, 180, 0);
GUI_DrawPie(100, 100, 50, 240, 300, 0);

GUI_DrawArc(200, 200, 40, 0, 0, 180);


GUI_DrawArc(200, 200, 50, 0, 30, 90);
GUI_DrawArc(200, 200, 60, 0, 30, 90);
GUI_DrawArc(200, 200, 70, 0, 30, 90);
Basic 2D library - Antialiasing 23

• Antialiasing smoothens curves and diagonal lines by "blending" the


background color with that of the foreground.
• Text
• Font converter is required for creating AA fonts.
• Circles GUI_AA_SetFactor(4);
Without anti-aliasing

• Arcs GUI_AA_DrawArc(160, 200, 80, 0, 0, 180);


GUI_AA_DrawArc(160, 200, 90, 0, 30, 90);
• Lines GUI_AA_DrawArc(160, 200, 100, 0, 30, 90);
• Polygons GUI_AA_DrawArc(160, 200, 110, 0, 30, 90);

The higher the number of shades


used between background and
foreground colors, the better the
antialiasing result (and the longer the
computation time).
Basic 2D library – text 24

• STemWin enables you to add text of any font into your GUI

• Several API functions are available to ease of use for text


• Display text at specific position
• Manage text inside a rectangle

GUI_SetFont(&GUI_Font8x16);
GUI_DispString("Hello from origin");
GUI_DispStringAt("Hello here, I'm at: 20,30", 20,30);
{
GUI_RECT pRect = {100, 60, 300, 220};
GUI_DrawRect(100, 60, 300, 220);
GUI_DispStringInRectWrap("Hello from
rectangle, my name is STM32F4 and I love
C programming", &pRect, GUI_TA_VCENTER |
GUI_TA_HCENTER, GUI_WRAPMODE_WORD);
}
PC SW Tools – Font converter 25

• You can manage your fonts in-application


• Create fonts from any Windows font
• Mange the number of characters so that you save only those you need → save
ROM space
• Export as .c files
PC SW Tools – Font converter 26

Using generated font


• Using the font we have generated is very easy
• Include the generated .c file into the project
• Include the external font declaration to all modules which will use it
• Use GUI_SetFont() function to point STemWin to this font
extern GUI_CONST_STORAGE GUI_FONT GUI_FontCopperplateGothicBold64;
extern GUI_CONST_STORAGE GUI_FONT GUI_FontCopperplateGothicBold64_aa;
..
GUI_RECT pRect1 = {0, 60, 319, 119};
GUI_RECT pRect2 = {0, 120, 319, 180};
GUI_SetFont(&GUI_FontCopperplateGothicBold64);
GUI_DispStringInRect("STM32", &pRect1, GUI_TA_VCENTER | GUI_TA_HCENTER);
GUI_SetFont(&GUI_FontCopperplateGothicBold64_aa);
GUI_DispStringInRect("STM32", &pRect2, GUI_TA_VCENTER | GUI_TA_HCENTER);

Drawing anti-aliased text takes


much more time! (and memory as
well)
PC SW Tools – Bitmap converter 27

• Static bitmaps or streamed bitmaps are supported


• Static bitmap is completely available during drawing (e.g. stored in Flash memory)
• Streamed bitmaps are available only by parts received by the MCU (e.g. reception from data
card).

• Supported formats
• Internal bitmap format
• BMP
• JPEG
• PNG
• GIF

• BmpCvt.exe can be used for bitmap conversion and storage to .c files

• Bin2c.exe can be used to store any binary in .c form, e.g. complete bitmap or
jpeg files
PC SW Tools – Bitmap converter 28

Using generated image file

include
Project

extern GUI_CONST_STORAGE GUI_BITMAP bmbutterfly;


GUI_DrawBitmap(&bmbutterfly, 30, 30);

Storing a bitmap in the same format as the


LCD increases drawing performance → no
pixel conversion needed, but may need more
storage space.
PC SW Tools – GUIBuilder 29

• Dialog creation made simple

• No C knowledge is needed
Object tree Widget selection bar

• Support to Drag & Drop

• Fine tune UI elements by


editing its properties

Widget properties Editor


Window Manager 30

What is the Window Manage?


• Management system for a hierarchic window structure
• Each layer has its own desktop window. Each desktop window can have its own hierarchy tree
of child windows.

• Callback mechanism based system


• Communication is based on an event driven callback mechanism. All drawing operations should
be done within the WM_PAINT event.

• Foundation of widget library


• All widgets are based on the functions of the WM.

• Basic capabilities:
• Automatic clipping
• Automatic use of multiple buffers
• Automatic use of memory devices
• Automatic use of display driver cache
• Motion support
Window Manager 31

callback mechanism
The callback mechanism requires a callback routine (window procedure) for
each window. These routines have to support the following:

• Painting the window


• Each window has to draw itself. This should be done when receiving a WM_PAINT message.

• Default message handling


• Plain windows need to call the function WM_DefaultProc() to avoid undefined behavior of the
window.

Further the WM needs to 'stay alive'. This can be done within a simple loop
after creating the windows. It has nothing to do but calling GUI_Delay() or
GUI_Exec() which does the following:
• PID management
• Key input management
• Timer management
hButton = BUTTON_Create( 10, 10, 100, 100, GUI_ID_BUTTON0, WM_CF_SHOW);
BUTTON_SetText(hButton, "Click me...");
WM_SetCallback(WM_HBKWIN, myCbBackgroundWin);
32
WM_SetCallback(hButton, myCbButton);
... ... ...
static void myCbBackgroundWin(WM_MESSAGE *pMsg) { Initialization – called only once!
int NCode, Id;
switch (pMsg->MsgId) {
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */
NCode = pMsg->Data.v; /* Notification code */
if ((Id == GUI_ID_BUTTON0) && (NCode == WM_NOTIFICATION_RELEASED))
buttonClicked = 0;
break;
case WM_PAINT:
GUI_SetBkColor(STBLUE); On release WM calls parent callback
GUI_Clear(); function with message informing
break; Redraw code about child touch release
}
}
... ... ...
static void myCbButton(WM_MESSAGE *pMsg) {
switch (pMsg->MsgId) {
case WM_TOUCH:
if (((GUI_PID_STATE*)(pMsg->Data.p))->Pressed == 1)
buttonClicked = 1;
break;
case WM_SIZE:
On click WM calls Button
// add some code
callback function
break;
default:
BUTTON_Callback(pMsg);
}
}

Default callback must be called


to achieve proper functionality
Window Manager 33

Widget library
• Widget = Window + Gadget

• Currently the following widgets are supported:


• Button, Checkbox, Dropdown, Edit, Framewin, Graph, Header, Iconview, Image,
Listbox, Listview, Listwheel, Menu, Multiedit, Progbar, Radio, Scrollbar, Slider, Text,
Treeview

• Creating a widget can be done with one line of code.

• There are basically 2 ways of creating a widget:


• Direct creation
For each widget there exist creation functions:
<WIDGET>_CreateEx() // Creation without user data.
<WIDGET>_CreateUser() // Creation with user data.
• Indirect creation
• A widget only needs to be created indirectly if it is to be included in a dialog box.
<WIDGET>_CreateIndirect() // Creates a widget to be used in dialog boxes.
Window Manager 34

Available Widgets
Demo
STemWin Example project 36

• Download
• www.st.com -> search “stm32cube”
Thank You

You might also like