How to integrate TouchGFX in a custom board (The long way round)
Vložit
- čas přidán 20. 08. 2024
- This video (hopefully) gives you the needed information to set up your own custom board with TouchGFX. I go through the most important steps when designing the hardware and set up the complete .ioc file from scratch.Then I create a simple TouchGFX project using the designer and create the rest of the code.Lastly I add the bit of setup code the SDRAM need to get the TouchGFX framebuffer going and we see the result live on the display.
I know that this video is VERY long but I hope that by not cutting the boring pieces away I can provide an insight into the process of setting up a project like this. Hopefully it will save you some time when you get to this point in your project :)
I had some issues with the sound on my first attempt so there is an abrupt cut at about 1:12:00.. sorry about that..
Let me know if this video was helpful!
Video Start 24:45
FMC->SDRAM 29:23
DMA2D 33:25
LTDC 33:50
CRC 50:27
TouchGFX Include 50:50
TouchGFX 52:10
Clock COnfig 1:01:30
It is not easy to get useful tutorial on the internet. But I have to say that this gentleman is really spending his time and using his own knowledge to try to help people. In my opinion, anyone who watches for more than half an hour of the video should LIKE the video. And I really did get help from it.
thank you for those kind words!
Dear HP, Waiting for further video about QSPI and Touch, This video is number 1 explaining 0 to 100 ever. Perfect
I did not understand some of the stuff but still helpful. I am going to start my first project with touchgfx soon using stm32f401 and ili9341 display. really nice tutorial
Thanks! But be aware that the documentation for the SPI driven displays can be a bit hard to work with
Looking forward to the next video covering QSPI and touch controller. Thank you!
This guy is an actual lifesend. My guy, thank you thank you thank you for these in-depth tutorials.
Thanks man :)
Some interesting things are coming to the tGFX system - stay tuned!
Thank you for a very long video :) This is necessary to show and explain everything.
I just finished my project ☺️ thank you! It’s working perfectly!
This video is really helpful to understand how to configure peripherals for initializing TouchGFX on custom board, Thank you!!
Thank you! It was extremely useful! I got stuck for a while because I was not creating the GUI task manually (weird decision from ST not to make the CubeMX create itself when selecting the graphical library!) and I had the screen showing garbage! Thanks again!
@@MarcoCargnelutti-h6x i think it is the best way to give the user free control over how they want to allocate resources for the tGFX. But it was not straight forward the first time I did it 😅
The easiest way to setup your clock system is by first typing in the desired main frequency (SYSCLK) in the textbox and let the clock resolver set the PLL, then go and set the PLLs for your peripherals manually so you get the maximum desired performance
Hey man great content! If your ever find time and motivation, please do more touchGFX content. This is way better than STMs own content on it.
Sure, I'd love to :) is there anything in particular you would like to see?
@@banjohat currently I am trying to get into custom boards and touchGFX gui design. I thought it would be smart to get a dedicated display running on a disco board as a first step after just using the disco itself. Before I have already fiddled with a basic touch gui and afterwards with a menu like gui controlled by physical buttons. In that process I found that the STM tutorials are kinda weird structure wise because they copy code into the project ignoring the correct programming order, at least I felt that way.
So for now I am just sucking up any good information on that topic until I get it up running myself. I may update this in the next few days hopefully. 🙂
@@banjohat Update: Alright, so I have run into my first problem. My cheap 2,4" display with it's ST7789Vi controller only supports 8080-I/II parallel interface. My old STM32F429I-DISCO I had lying around and STM32s in general support this type of interface by configuring the FMC in LCD interface mode. But I did not figure out all the details yet. The ST forum has a solution dating back about 3 years but the current version of CubeMX is even featuring a ST7789V FMC driver, though I am not sure what to do with this. If you have experience with this, a tip about what to do would be highly appreciated. However I'll fiddle around with this anyways.
Thank you for showing us how to create our own products from these demo kits!
Thank you very much for taking the time to explain all this. Great tutorial!
Fantastic video. Thank you so much for the in depth discussion. You cover very well the things that I had previously worked through on my own, and taught me additional things in the process. I would add one point to your frequent (and correct) comment that the Cube only generates hardware setups. Back in the day when the Cube was first introduced as a micro initialization tool for GPIO and peripheral setup, this was exactly the case. However, with the growth of the tool and the gradual introduction of several middleware layers, it is not so clear anymore where that line is or should be drawn, and I think users understandably expect to have some basic software calls where their absence would lead to a completely unusable system. For example, I recently discovered their BLE stack provides all you need for the stack...except a call to start it. Once you figure that out, you're fine, but until then it can be a beast. Anyway, the Cube is getting better all along, and you have contributed much to the progress, I think.
yeah, one do get the impression sometimes that cubeMX is a wide mix of different wants and wishes. It does a good job for most of the generations but does lack some particularities..
What a nice video, you really made everything clear. I'm reaaaally looking forward for the video regarding the QSPI, as I have never edited the linker related scripts... Thanks and greetings from Chile!
Loved it the very best tutorial for a raw user. :-)
It's immense deep!
Thanks for your insight!
This video is a gift for desperate people.... 😂😂😂😂😂😂😂😂
Thank you veeeery much !! The long way around is sure the best way !
thank you very much! Well, the long way gives you a bit more flexibility I think. but the templates can get you started faster
This video provides great information. Thank you very much. I'm looking forward to view all of your videos.
man you're a god, thanks so much
38:11: Displays can sometimes be just weird. I had one where my horizontal porches were too short so as a result a single white pixel got 2 slighly green neighbours in each line. Took me a day to figure out that the manufacturer sent me the wrong datasheet for the display. So yes, magnifying glasses are a must have. As you said!
Ouch, sounds like a real pain! The right datasheet will definitely help ;)
Thanks for teaching me. Really appreciate it.
thank you, this is very helpful
For those who are going to repeat these steps of custom generation of the project: the order of initialization of MCU modules in Cube is important. Refer to examples TouchGFX projects to see the correct order. I wasted hours figuring that.
Not too long. Very Nice video ! Thank you. I would bé curious how to interact freertos with other event
you will be happy to know that I made a video about that as well ;)
czcams.com/video/majcfxr3u2E/video.html
you saved me a bunch of time... Thank you!
Fantastic video. Thank you so much for the in depth discussion.
Giving you 100$
Very informative and helpful. Thank you.
Thanks for the video!!!My appreciation!!!
Thank you so much, man. You've helped me a ton
Thank you, Waiting QSPI and touch controller implement.
Continue to make such nice videos bro... Thanks...
Thanks. Very helpful video for me.
Best content 👍
Thank great vid, looking forward to your video about touch
Thanks for sharing
very good, thx HP. I did learn a lot...
Just one note, @22:45 there is no need to connect a pull-up resistor on Reset pin because there is already an internal one.. Please refer to the datasheet
thanks for updated video
It was very helpful, thank you for your efforts
How can we have the complete file of this project?
No files available, this is for information only. You should be able to create your own setup using the instructions provided
Thanks great video, you good..very good..............
Useful video. Thank you.
Thank you for this full length vid! You have answered many questions I had when developing my frist, second and thrid STM32 applications with touchGFX. Question: What do you think about bulding a TouchGFX template for a custom board... would that help if the board is used for multiple applications by essentially use a touchGFX template similar to what STM creates for their eval/disco boards. This is something I have been considering making for my boards, but wonder if it is worth the time. Thank you for all your awewome videos! I hope I hear an interview with you on The Amp Hour some day!
That's an interesting thought - I have considered it a number of times but didn't go into much detail on constructing the Application template needed. For my particular application the hardware haven't really changed in the 4 iterations that I have run so I haven't had the need for the AT. Also I do most of the work in CubeIDE since the designer is just for the GUI stuff (obviously). It's done so quickly that it doesn't make sense yet.
However, I have thought of making a board for props that require displays to sell. If I do that an AT will make so much sense beacuse then the end-users can do almost all of the GUI design in the designer only and don't care about the underlying hardware... uuh.. another project :D
The Amp Hour - Sounds really cool! Didn't know about that, would be amazing to talk about this :)
thank you thank you thank you
Recently discovered your channel and love this content. Really appreciate that you keep the issues rather than editing them out. One note: @1:20:54 you say that CubeMX does not setup firmware, only hardware. But what about RTOS, FATFS, USB stack, etc?
Thank you for the kind words! I'm happy that you found it useful :)
Well, you're right - CubeMX does set up RTOS and the other things BUT! a lot of people had the idea that by using CubeMX everything would be done. Like the timing and config of SDRAM. It does not. Likewise the timing configuration of QSPI memory is also up to the user. This have historically resulted in a lot of frowning and confused forum posts :)
Thank you for the best video on the topic and one of the best explanations i have ever seen. I have 2 questions your FMC start address is 0xC0000000 but at the end of your video where you show the memory statistics then the flash starts at 0x08000000 and the Ram at 0x20000000. Also the .data section of your flash starts at 0x20000000. Can you please give some more info? I am trying to use nucleo H755ZI with a custom Riverdi screen as an intermediate step and i am not sure what should be the setup for the address. I tend to use 0x20000000 but it is better to understand than only to try. And also in riverdi datasheet there is no polarity is there any what to identify proper setup?
to answer your first question - there are 4 types of memory all mapped into the same space, hence the different starting addresses. There really isn't more to say about that - but if you place your framebuffer in 0x20000000 then you are using internal RAM - which you don't have much of.
depending on your bit depth and resolution you might not have enough to run a double buffered setup which you need in order to do animations (sometimes even triple buffers)
For the polarity - the hint is to try out different settings here. a key tip is that even at a breakpoint you can tweak the polarity settings and see the difference live.
Thank you very much for sharing your knowledge and this wonderful project. I have some questions I would like to ask:
1.- Where can I get the schematics of the development card that you use as a base to develop your customized card?
2.- Do you have the schematics of your custon PCB and the firmware you develop available on GitHub?
3.- Do you know of any website that explains which displays can be used to work with TouchGFX in a custom board and where they can be purchased?
Thank you very much again for this wondeful tutorial ;-)
Great job! Thank you for sharing your knowlege. What changes should I do if I use another TFT-Display for example (3.5inch Arduino Display-UNO ILI9486) or other with SPI-Interface.
This is very good video information.
It is a project that I want to challenge with the information I was looking for.
We would appreciate if you could share this KiCAD file.
Thank you.
thank you
Thank you for this video. how I integrate touchgfx in a custom board with spi display?
You will have to implement a SPI driver that can push the framebuffer to the display. tGFX does not care about which display you're using it just maintains the framebuffer. What you do with it and how you do it is entirely up to you. With that said pushing a specific area of memory to your display should be relatively straight forward :)
Hey, You are doing some great content for the people, Is it possible for you to share the schematic or the pcb file with us? And what IC did you use for the touch screen?
sorry, this video is for educational purposes - the design is not available for free.
however, the design is closely based on the STM32F746-Disco board so you have a pretty nice starting point there.
The display is parallel RGB so no chip on it
very good
Thanks for your video. it was great.
But my screen is not stable. I don't know what to do.
it is a simple clock. at first it is Ok but after a second, it start to move.
Can you help me?
You have detail video lesson. Thank you for spend your time. I have a question. Dont working touch screen. Do you write driver for touch IC. How do you make touch section.
I'm using the same touch driver as the evaluation board but you have to i clause it manually. It should be in the video how to add the appropriate files for the touch support
Sorry I was mistaken. It's in the next video: czcams.com/video/ELMK35I86QE/video.html
thanks
If I have to use larger displays(7 inch Or 10 inch) what should be the specifications of it?
Do you know any display names?
I have a few parallel RGB displays that are 7" and 10" - they are completely the same, connectionwise.
I have bought my displays from buydisplay.com
Hello, where would you suggest is a nice and cheap place to get LCD displays?
I have been happy with buydisplay.com - They sell in single pieces and you can get a price up front.
Hello. Thanks for your great video. I have one question for you. I am using CubeIDE1.5.1 but it doesn't show up Software Packs list in configuration window(below middleware). Do you have any idea? I already installed touchgfx.
Hey , Thanks for the great video. I'm also designing my own custom PCB for stm32f746. I have a question regarding the debugging part. I'm using SWDIO & SWCLK Pins, but Where to connect them? I mean, I have a STM32F746 Discovery Board but I don't think Ít has any pinout connection for connecting SWD & SWCLK pins for external custom boards to debug. I've worked before with TI MCU's and they use JTAG for debugging custom boards.
Also, My second question is Which part number of SD RAM have you used? In the datasheet there are several part number of the SD RAM chip with different clock frequencies.
You're right, the discovery board have the st-link built in. When you're designing your own board, just break out the swdio and swclk pins along with power. Those can be connected to an external st-link. Just not the one on the 746-disc0 board. All the nucleo boards should work
I was stuck in a related issue and you saved me. Thank you thank you. I want to ask about SDRAM initialization code, How is it done? what does it mean? why without it STM32 can't access the memory ?
I'm glad it helped you!
Remember that the Cube code only initialize hardware. Of your system requires some register setup you still need to do that yourself - that's what the code does.
Think of it like this: the cube gives you the keys to a car - you still need to turn it on to drive
@@banjohat Thank you sir, another unrelated question if you don't mind please. do you have any idea of the correct way to interact with SDMMC within FreeRTOS?, something is wrong with my program, and I still can't figure it out.
@@mehdisehlouli4645 sorry, i haven't worked with RAM more than just setting it up for tGFX
hello, i need an help to create an custom project without any external ram and flash
please help if possible
Just skip the init on those parts
I tried to catch it in the video, but what RAM did you choose? the 746 board uses a 32 bit ram, and it looks like they only use half of it. To save space (package is smaller) and money I want to use 16 bit rams, I just want to be sure I don't pick a wrong one.
I am using the winbond W9864G6KH-6
it can be hand-soldered and is 16-bits :)
I did what have you done but my display screen just white screen can you help me
bende aynı sıkıntıyı yaşıyorum (suzan mı susan mı bdckjsdnlkjcş)
Check your clock polarity and consider looking into your framebuffer to see if you are getting content.
If that works you need to try and generate some static image. I have a video for that. I suspect that your problem is hardware related
@@banjohat thanks for responding 🤞. I'll try
Hi, Thanks for the great video.. I also made my custom PCB and tried connecting a 4.3" touch display. After Loading the code to the MCU and hitting the play button, I can see the screen for like 1 second and then the display starts resetting(keep going on and off very fast).. In the debug console it starts showing
"Target is not responding, retrying...
Error! Failed to read target status
Debugger connection lost.
Shutting down...
"
I've selected serial wire in SYS . I can upload the code to the MCU.
sounds more like a power supply issue. you're losing connection to the debugger so the whole system is resetting.
It's Happening only when Iám using the Backlight driver MIC2287. If I don't turn HIGH the Backlight GPIO for MIC2287, the MCU is working fine. I checked by simply toggling a GPIO and its works fine without loosing connection to the debugger. The issue starts when I change the status of backlight GPIO to HIGH . Is it something with the Schottky Diode thing?? Iam using SS14 Schotky diode with a 10uH Inductor on my PCB as I Could get the STPSL140M Diode that is used in the Disco Board.. Is there any particular Diode to be used
@@sumitmourya6528 I think the best way forward is to check with the datasheet and have the backlight running before you attempt running it combined with the STM32. you should be able to see the backlight and determine if it works :)
@@banjohat Yes, I figured out the problem. The output of my Schottky Diode is unstable. I need a more faster switching diode(faster than my current diode) . Not all Schottky Diodes would work here. I tried using SS14,SS16, but They are not capable of fast switching. I tried IN4007, though it is a general Schottky diode but at least it keeps the supply stable, The TFT works fine with IN4007 but with a very low brightness , Maybe because the IN4007 diode has a large voltage drop. Can You tell me Which Diode you used? I mean the diode number. Would just save me some time.
@@sumitmourya6528 I have been using the ROHM RB501VM-40TE-17
I just now see that it has been discontinued :(
Hi ,
Have you tried interfacing any LVDS Display using RGB-LVDS converter Chip?
unfortunately. I would like to try it out but I haven't had the courage yet :)
I'm having an issue with my framebuffer generated by TouchGFX. Source code is not provided for this section of the engine. Due to constraints of the STM32F4 I can only write to my external SDRAM in 32 bit words. However the touchgfx::LCD24bpp::fillBuffer wants to write is with 8 16 bit pointer pointers. My TFT display is an RGB888. Is there a hook or some other thing I might be missing? Thanks for any help.
Oh that was a tough one! I haven't had any problem the even remotely resemble that situation.
You will be better off asking in the tGFX forum - the dev team have people there so you should get some insightful answers (hopefully)
Hello
if it is possible
can you share schematic design?
No, sorry. This is one of the many parts you will need to do on your own
Did you test using a internal memory??? without an external??? i'm trying and nothing.
Sorry, I'm Using STM32H7A3VI! 2Mb Flash, 1.4mb of RAM , but 1.1Mb of SRAM at the end, if you any suggestion, please let me know
i don't understand one thing the frame buffer is larger than the sram of the microcontroller is it using the external sram for frame buffer?
yes it is. If you try to compile the code without the linker script modified so it supports external RAM you'll get an error. you can reduce the bit depth and the number of framebuffers to fit into the internal RAM but you will use most of it and loose some animation features
I had a problem. PortE0 FMC_NBL0 and PortE1 FMC_NBL1 are yellow in color
what's the problem
thank you
yellow only implies a partial error. it might not affect your situation or configuration
@@banjohat thank you 🌹🌹🌹🌹🌹🌹
Hi
Firstly Thanks a lot for video.
I want to use resistive touch. I use Ft810 with 800*480 resistive touch but i want to use touchgfx after that.
are there any sample with resistive touch or can you advise any documantation?
I'm pretty sure the F429i board is using a resistive touch interface - but with an extra touch controller chip IIRC. At least that's a good starting point :)
@@banjohat thanks for your interest. I ll examine it.
What current draw do you expect from the SDRAM?
That's actually a very good question! I haven't got the faintest idea.. But my current application does not require the SDRAM at all to work so I might be able to get back to you (at some point) and answer the question with some measurements..
@@banjohat Thanks, I am quite new to SDRAM and how it works. I have a project where I might use SDRAM but I fear that this uses to much current for my battery powered application. I saw numbers of about 180mA while write/read operation but I want to know how much it draws without r/w operation, just to retain data. All those numbers are still too confusing for me :D
👍👍👍
Can I use touchgfx with STM32F103?
Yeah, you should - However performance is limited since you don't have SDRAM or QSPI memory - but that can be added :)
Hi. Is it possible talk in private to help me with my first project? I'm new in the St MCu world, and I have an custom prototype board with stm32h743vit6 and nothing works. I followed your tutorials but my screen is always black. I thing there are some wrong configuration but at the moment I'm not able to find it.
Hi Marco, unfortunately I don't have much time these days for helping out. I would suggest that you look through some of my other videos to debug each module needed separately
I am going along a similar path. If you had access to Altium, would you start with ST's files and remove the parts you aren't using? I would presume yes. In similar fashion, would it not make sense to start with the TouchGFX application templates and change/remove the items in the IOC using CubeMX? It seems that the guys at TGFX want us to build from scratch. Have you tried it both ways and are there good reasons to build the Cube project from scratch?
If you have altium, yes :) i opted to go with KiCAD since a friend of mine started the layout.
The problem with the application templates is that they are specific for the dev-kits. So as soon as you make custom firmware you are likely to change a lot of parameters anyway.
I have not made a custom board using the designer as a starting point because my own HW differs too much.
I have tried both ways (for the dev kit). When using ready made hardware you can get up and running REALLY fast using the AT. But I think you are supposed to make it from scratch when developing real stuff
@@banjohat I had a thread/discussion on the forum about this last year. "You are supposed to" build from scratch seems wrong. If I use the DISCO kit, build up test circuits on Arduino type hardware, get it 95%+ to my target config, at what point to I throw away my project and start it from scratch, (and then port my own work back in). Seems like most users will do as much development on the dev kits as possible to reduce iterations of final hardware. The tools should embrace that process.
@@TurboBobBailey You're right - but in fact I think they do a fair job. think about this: the people working on GUI and graphical stuff can use the AT's to get started and going real easy using the designer approach.
the HW guys will have to do a lot of wiggling anyway and the custom method allows for a fairly quick integration of peripherals. tGFX is XML/JSON based (or something very similar) so it's quick to change the files.
Of course it would be nice to be able to have support for different chips along with FW init but I don't think that is a feasible way to do it for ST.
@@banjohat I think they do a fair job also. I just think they are missing the one step. Most likely they are all Graphical/GUI guys on the tGFX team, and thus have not had to make that transition (from AT to custom) themselves. The subject of your last 2 videos, perhaps 3 hours or so video length, probably a day or 2 real time, should have been a couple clicks, automatic, to convert the AT project to a 'custom' project. After all, you had to refer to the AT (or perhaps a previously/painfully converted project). The info/data is there, its just organized strangely due to the new AT organization (sources outside the CubeIDE project). As far as migrating a project to a better chip. I want to be able to do that, as I am developing on F746-DISCO,and want to move to H735. My Freescale stuff can do that in a couple clicks. Currently I am trying to keep all my code out of main.c, and in its own directory, so I can migrate out easily. But I will start with the AT for the 735 disco board, and have the same fight on my hands converting the project (or building from scratch and copying over all the disco code). Of course its always easier the second time thru.
Great video 👌
Which display panel you using. Can you share me the part number?
Sure - this one: www.buydisplay.com/low-cost-4-3-inch-480x272-tft-lcd-display-w-optl-capacitive-touch-screen
@@banjohat
thank you
Do you have the datasheet of the ST LCD 480X727 which comes along with the evaluvation board . MB1315A
@@sijojohnson No, I haven't got any information on that. It's probably obsolete already ;)
@@banjohat
Sorry it's 480x272.
any feedback on how the single frame buffer is working?
Sorry, I'm not sure what you mean :) (can't remember what I said in the video)
I have only worked with the double buffer strategy since I want to do smoothe transitions (should turn on the third buffer as well - I have the space for it).
I suspect the single buffer will work just fine, but all changes will be instantaneous. This is actually a nice topic for a video :)
@@banjohat you added the footprint for the RAM as "optional", it sounded like you were planning to use only a single frame buffer. I switched my disco board to single frame buffer and it got very 'flickery' when using the swipe container. I was curious if you had workarounds. Sounds like double/triple buffering is going to be required for my project. You also switched from 144pin to 176 due to pin assignments, I need to re-watch to see what exactly the issue was, since I am at that point and am concerned about availability. I was going to switch to an H7 part for speed, but availability is not as good as the F746
@@TurboBobBailey Ah, yes, well, the external memory IS optional - but you will get the issues you have noticed. if you can fit a double buffer in the internal RAM you could most likely get away with some of it, at least I don't see the tGFX tutorials utilize the 3rd buffer at all.
So from a cost perspective it would be interesting to omit the SDRAM but from a performance - not so much. I think my mention was something along the lines of 'Well, the footprint is free, so I just add it and figure out the cost later'.
It would definitely be very interesting to test out the visual performance of all solutions!
@@banjohat in my "custom project", similar to yours but I started with the disco application template project's IOC file and copied main.c over completely. My build analyzer is not working (want to watch memory space to see if the 512K parts could be used, thus 1M parts serve as a backup in case of availability issues).
Can you tell me please! Where did you buy the display?
buydisplay.com :)
@@banjohat Thanks, was about to ask the same. But then I thought "Read all his answers before you ask, someone might already have asked" And here it is.
Volumen a bit low
Oh yeah. Had to crank mine up to max as well. But then it is just loud enough. Surely it meets the french "ear damage max volume" laws :)