Diese Library bindet die STemWin (in Version 5.22) ein (ohne OS).
“emWin” ist von SEGGER (www.segger.com) und ST hat für seine STM-Familie eine kostenlose vorkompilierte Library dazu veröffenlicht “STemWin”
Mit “STemWin” kann eine Windows ähnliche GUI programmiert werden mit Buttons, Fenstern usw.
Das ganze ist sehr Umfangreich und ich kann hier nicht jede Funktion erklären. Dazu gibt es viele Dokus im Internet u.a. auch von Segger und ST (einfach mal suchen).
Auf der Internet Seite von Segger gibt es auch viele Beispiel-Programme als “C-Files” für die einzelnen Funktionen die man direkt benutzen kann.
In meinem Beispiel sieht man die Init-Funktion (das ist nur eine Zeile) und danach wird ein Text und ein Button gezeichnet. Wenn man auf dem Button drückt, wird er gelöscht.
Ich habe alle notwendigen Librarys (LCD, TOUCH) in den emWIN-Ordner kopiert, weil ohne diese Files das ganze eh nicht läuft.
Im Moment funktioniert das umschalten auf “Landscape” nicht…aber die restlichen Sachen müssten laufen. Ich hab auch ein “Show-Projekt” hochgeladen, mit dem original Demo von ST in dem man ziemlich viele Funktionen zu sehen bekommt.
Beispielbild :
Funktionen :
1 | ErrorStatus UB_STemWIN_init(void); // zum init und start von STemWin |
Beispiel :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | //-------------------------------------------------------------- // File : main.c // Datum : 14.12.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.4 // GCC : 4.7 2012q4 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der STemWin-Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_stemwin.h" int main(void) { BUTTON_Handle hButton; SystemInit(); // Quarz Einstellungen aktivieren // init und start von STemWin UB_STemWIN_init(); // Font einstellen GUI_SetFont(GUI_FONT_20F_ASCII); // Text ausgeben GUI_DispStringHCenterAt("Hello world!", 80, 20); // Button-Demo while(1) { GUI_SetFont(&GUI_Font8x16); GUI_DispStringHCenterAt("Click on button...", 160, 90); // Create the button hButton = BUTTON_Create(110, 110, 100, 40, GUI_ID_OK, WM_CF_SHOW); // Set the button text BUTTON_SetText(hButton, "Click me..."); // Let window manager handle the button while (GUI_WaitKey() != GUI_ID_OK); // Delete the button BUTTON_Delete(hButton); GUI_ClearRect(0, 50, 319, 239); GUI_Delay(1000); } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :
Ich habe gegen ssd1289 die libs getauscht.
Die 1289 demo läuft ohne probleme aber mit der gui habe ich nur bunten schnee auf dem display.
Hallo Jörg,
das Problem haben wir auch (siehe Kommentare zum STemWin-Show Projekt)
Leider habe ich noch nicht die richtigen Treibereinstellungen gefunden.
A small question plz :
I want to make the uploaded project works with ssd1289
you said you have exchanged the libs , would you tell me briefely what do you mean by this ?
Have you added your own driver files like :stm32_ub_lcd_st7783.c
and stm32_ub_lcd_st7783.h
plz I need help and I can pay you.
Hallo;
habe beim compilieren die Folgenden Fehlermeldung:
error: Demo_70.elf uses VFP register arguments, ……
Verwende dein CooCox Beispielprojekt
Was ist bei mir falsch eingestellt.
Gruß
Are you able to use the emWin GUI functions involving the touch screen? I could not find in your source code where the touchscreen APIs for emWin are. But I note you have your own touchscreen drivers in stm_ub_touch_ADS7843.c. In my case I am using XPT2046. I am also using SSD1963 with the stm32f4discovery board so I am very grateful that you made your code available, and I have adapted your source code to my system with only a few changes.
Yes, touch is running. You need two functions. First a “Touch_init”, called before emwin is started. And second a cyclic “Touch_read”
The function call for the first one is in :
“stm32_ub_stemwin.c” => “UB_Touch_Init()”
The “Touch_read” function is called by a Timer (every 50ms) :
“stm32_ub_touch_ads7843.c” => “P_Touch_Read()”
The Touch values are stored in the structur “Touch_Data”
In the file “stm32_ub_stemwin.c” these data are copied in structur
“TS_State” that emWIN uses.
Thanks for the clarification. I’m happy to report that I have now got the modified LCD demo Show_08 program to work with a 7 inch SSD1963 LCD module! Haven’t checked the touchscreen part yet.
Hi MO,
could you please share your 7″SSD1963 Display init/driver config with us ?
I’ve got one of this display modules recently and would like to get it up and running with the discovery board.
Thx in advance, Tom ;o).
Hello Tom,
to make emWin work with Your Display isn’t so difficult.
First You need to setup the bus and the hardware settings for it. You could use a driver you find in the net…
Second You must change the display in the emWin driver and make the settings for resolution… Thats all
Thats for SSD1963 : pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
It’s important to take care about the initial code if the used Display. Even the display driver chip, like the SSD1963 is similar on the Display module. The part of the Timing, resolution and Geometrie should be fit to the driven TFT-Display. A good source for the init code are the examples thats often ships with the Display.
I have a proplem with your code:
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol BUTTON_Create (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol BUTTON_SetText (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol GUI_ClearRect (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol GUI_Delay (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol GUI_DispStringHCenterAt (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol GUI_Font20F_ASCII (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol GUI_Font8x16 (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol GUI_SetFont (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol GUI_WaitKey (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol UB_STemWIN_init (referred from main.o).
.\Out\KT_Blink.axf: Error: L6218E: Undefined symbol WM_DeleteWindow (referred from main.o).
Could you help me explain it ?
my example is running in CoIDE without a compiler warning or an error. So you must have changed the code or the IDE. Without knowledge about your modification i can’t help.
Hallo Uwe,
an welcher Stelle im Code sagst du der StemWin Lib das du die SPI Schnittstelle verwendest? Ich kann es nicht finden, es muss doch auch möglich sein das FSMC Modul zu nutzen. In einer früheren Version der Lib gab es den Hardware Abstraction Layer (HAL) mit dem man die LLD Schnittstelle definieren konnte. Ich finde es nirgends, kannst du mir einen Hinweis geben? Danke
Benedikt
es wird die FSMC-Schnittstelle für das Display benutzt.
Direkt , gar nicht. Der SPI wird nicht von der LIb bedient, sondern die Routine, die den SPi abfragt und das Ergebnis des Lesens zurück gibt, wird beim Init in eine Struktur übergeben. Dies macht die Anschlussart und den verwendeten Chip transparent. Es könnte statt des Touchpanels ja auch ein Joystick oder gar eine Tastatur oder Maus benutzt werden. Die zwei Klassiker für Touchpanel-Controller werden jedoch teilweise unterstützt. Der SPI muss aber genauso wie der FSMC zunächst mit einer INit Routine Initialisiert werden. Diese kann man in einer Konfig-Dateien des GUI-Lib beim Start ausführen lassen oder man macht es eben selber – ganz nach Belieben.
Hallo,
ich möchte den Displaytreiber RA8875 von der Firma RAIO einsetzen und suche hierfür die passenden Funktionen um diesen mit der STemWin-Library zu betreiben. Könnt ihr mir weiterhelfen?
Danke
Hi
I am newbie to the stm32f4
I want to use the ssd1963 but need to know how to set the wires between the board and the display…find something in the driver but do not understand…
Can someone help me to understand where to set D0 to D15 and the RS RW etc….
Please
Hjalmar
http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00093903.pdf
I’m sorry for the possibly really stupid question but I didn’t understand how to configure the emWin for the LCD I am using. I use the DM-LCD35RT that comes with the stm32f4dis-bb kit. I changed the things you pointed out to MO and I get a black screen with a dotted white space where the text and button should be probably.
sorry, i cant help. is the display working without emwin ?
Hello,
I have not worked with this LCD, but perhaps they can use GUIDRV_Template.
Check the manual EMWIN on page 1092.
yes it is working without the emWin and i will check if i would manage to do something with the GUIDRV_Template, thanks.