EasyGUI preview on STM32F7-Discovery

Last 2 months I was working hard to build a platform independent graphical user interface library for embedded systems. I called it EasyGUI because idea behind is very simple library with support for custom user based widgets with touch and keyboard support. So far I built these features:

  • Unlimited widgets (limited to RAM memory)
  • Support for widgets which support children widgets (windows, panels, etc)
  • Support for touch and keyboard events
    • Support for UTF-8 encode and decode functions
  • Support for custom widgets as all widget uses the same core functions
  • Support for fixed size or variable size (relative to parent)
  • Support for multitouch
  • Optimized drawing operations to draw only necessary parts of display
  • and more.

I will use this library and hardware as part of my master thesis project. I recorded simple video showing all the current features and widgets I have so far. Please watch video below and give feedbacks what do you think.


Owner of this site. Also electronic enthusiasts, web developer, 3D printer fan, handball player and more. Big fan of STM32F4 devices. In anticipation of the new Discovery board for STM32F7 lines.

You may also like...

Read before commenting!

Before you make a new comment, make sure you agree with things listed below:

  • - Read post to make sure if it is already posted what you are asking for,
  • - Make sure you have the latest version of libraries used in your project,
  • - Make a clean and grammatically correct written message,
  • - Report as many details as possible, including what have you done so far,
  • - Do NOT post any code here. Use Pastebin,
  • - Do NOT post any error codes here. Use Pastebin,
  • - Specify STM32Fxxx family and used Discovery/EVAL/Nucleo or custom made board,
  • - Make sure your clock is set correct for PLL,
  • - If you are using my HAL drivers, please check this post how to start.
Comment will be deleted on breaking these rules without notification!
  • volkov9999

    Excellent, will it be possible to upgrade the design?

  • Borut Kastelic

    Tilen, fantastic work!

  • Gabriel Santos

    Hello. You did a great work. I would like of contribute with the project, is it possible?

    • Hi Gabriel. Kindly write me an email with how you would contribute and then we can decide for more. So far I’m working this for my final master project and I don’t want to include code which is outsourced. So far for probably 1 month or so, later this code will be available to contribute.

      If you can send me what and how you can contribute, that would be great.

      • Gabriel Santos

        Thanks for anwser me.

        Where I find your email? However I would like of to implement some funcitons out of the core program, like “LCD_Init”, LCD_GetPixel e etc to became the library more generic. After that, I pretend run the EasyGUI in STM32F429 Discovery, STM32F407 Disco with SSD1289 Display and STM32F103 (it’s a board that I did in past).

        I will write with more details by email.

        • You can see it in contact or somewhere else. I won’t write it to comment here, it’s disqus program. There is already separate layer for LCD specific routines such as draw pixel, fill screen, fill rectangle, draw vertical/horizonta line and get pixel. If you check Github you will see gui_ll.c file with low-level implementation for LCD specific.

  • elmzaiti youssef

    hello i want to migrate our project form stm32f4 to stm32f7 , so the problem in stm32f4 and stm32f2 we use a bitbanding to read or write a bit in gpio , and in stm32f7 , there isn’t a bitbanding region it’s incompatible , and we don’t should to use a fonction like a gpio_writebit()…… , because it’s a big a project and so it’s increase the exĂ©cution time , help please

  • Jupp Kaltofen

    Well, i had watched your hal library and seen that this could be a nice Startup Point of Projects.
    There are some Points that i would notice and would prevent me to use them, even this would save time to get the Project finished. The first Point is, that the usage of them make every application depend on your Libray. Second, the size will be raised because an further abstraction was build around. and in Addition, there is no difference to use use the ST’ HAL instead. I wrote before that the usage is not forbidden and maybe a solution for developer who don’t wanna understand the MPU’s functionality in detailed.
    But everyone should remind that this way is a fast way to go, but not the best.

    I had watched the published Video about the easyGUI. Nice Project and Looks great – that could be a good replacement of stemwin ( Segger emWIN) if the Lib is finished an full functionally available.
    I had missed the Canvas and some 2D Elements, like rotating vectors-Arrays to build a custom moving arrow or a waterfall diagram into the gui Dialog.

    • That’s correct, but it is easier to show people how it works. For very experienced programmers, we propose use of LL drivers where possible to really optimize CPU usage.

      Regarding EasyGUI. I’m still working on it. The idea was to learn how professional GUIs do effective redrawing to optimize usage in various ways. I work on it when I have time as this is part of my master degree project. I’m updating code regulary on Github https://github.com/MaJerle/EasyGUI. In fact, if you have F7-Disco, you can directly test hex file which is also included in Github provided above.

  • IB


  • IB

    As the old man says.

    Development is important, but the most important thing is to document.

    Please understand this I write as constructive criticism, because I found your work very well * developed *.

    I see that you have documented everything via (Doxygen), more so that you can understand, as well as I, it is worth the following explanation, and I also think it will be worth it to you.

    function (GUI_Init) serves what?

    It could be so easy to understand your function, such as the equivalent (UG_Init) of this site (http://www.embeddedlightning.com/ugui/), the “> > >” in your documentation.

    At least the moment I write you, I’m also developing a QT software to facilitate my life, and for a few more when it’s available, as you’re doing.

    You at some point must have thought or imagined, wouldn’t it be easier, if he had commented at least in the header of the function, what serves this fucking function?

    Sorry for the shit, it was a rant.

    If there is not at least the mention, comes to the question, what does the function serve? Or how can I use it?

    In some very historical moments, and memorable, we could say, I invented something that was never done.

    I could have taken some parts of the text above, plus I found it interesting that they remained for their compensation.


    • Hello IB. As you can see from title, it is “preview”, which means not everything is set up yet.
      If you need inputs for your QT app then say it. Btw, I’m doing it from skratch totally, taking care of everything, including drawing optimization and touch reading.

      If you don’t know what function is doing currently, you can find its structure here: https://github.com/MaJerle/EasyGUI/blob/master/00-GUI_LIBRARY/gui.c#L476

      I don’t see a constructive reason why you have to use “fucking” and these words here.

      • Ivan Braga

        Hello Majerle Tilen.

        When I was writing the message above, it was in a warm-headed moment, with things that were going wrong.

        Then I’d like to apologies for the words I used, and that they bore you.

        Once again, thank you for the excellent work and I regret my misuse of words.
        IB – Ivan Braga

  • VY

    Hello Tilen, you did fantastic work! What kind of license did you use? It is free free for commercial use? Thank you.

    • Yes it is. It has more features than you see on video. Code is on my Github available.

      • VY

        Thank you for fast reply.