Skip to main content
MKoca.1
Senior
December 10, 2020
Question

Hello everyone. I want to use my 7inch LCD screen with TouchGFX using STM32F429 processor. My LCD screen has SSD1963 drive and has FT5426 touch. I can show normal images on my screen. But I didn't manage to integrate it with TouchGFX. Please help me.

  • December 10, 2020
  • 30 replies
  • 5980 views

..

This topic has been closed for replies.

30 replies

Michael K
Senior III
December 10, 2020

Lacking further details, your best bet for help is the board bring-up documentation.

Embedded UI/UX Consulting: cadenza.design
MKoca.1
MKoca.1Author
Senior
December 11, 2020

I had run TouchGFX with STM32F429's own screen. But I cannot configure TouchGFX on an external display. I think I couldn't configure the FrameBuffer properly.

Flemming Gram CHRISTENSEN
ST Employee
December 11, 2020

Hi.

How do you want to attach the SSD1963?

It can handle different connection types. The way forward depends on that.

MKoca.1
MKoca.1Author
Senior
December 11, 2020

I'm running the screen with FMC, but TouchGFX doesn't see my frame buffer. I am not sure my configurations are correct.

0693W000006FR10QAG.jpg0693W000006FR0qQAG.jpg0693W000006FR0bQAG.jpg0693W000006FQwLQAW.jpg0693W000006FR0HQAW.jpg0693W000006FQzsQAG.jpg0693W000006FQzYQAW.jpg

Flemming Gram CHRISTENSEN
ST Employee
December 11, 2020

If you have non-TouchGFX examples where your display is working, then use the same framebuffer address with TouchGFX. Here you set it to 0x60000000.

Also I advice to not use DMA2D with TouchGFX and for transferring to the display. Start with No acceleration for TouchGFX. When it works, you can add it again. Problem is to synchronize the two users of DMA2D (waiting and handling in the interrupt handler).

MKoca.1
MKoca.1Author
Senior
December 11, 2020

Thank you very much for your answer, I will try this. I'll rewrite the next events here.

MKoca.1
MKoca.1Author
Senior
December 15, 2020

@Flemming Gram CHRISTENSEN​ 

Hello again. As you said, I define the address 0x60000000 as SingleBuffer. But I couldn't figure out how to fill the Buffer. How do I send the TouchGFX pixels to my own buffer? Could you share a clear and understandable function of this?

Flemming Gram CHRISTENSEN
ST Employee
December 15, 2020

Hello.

TouchGFX will draw into that buffer automatically when you setup TouchGFX in CubeMX and pass that address.

You can read more about setting up TouchGFX for FMC displays here:

https://support.touchgfx.com/docs/development/touchgfx-hal-development/scenarios/scenarios-fmc/

You can also be inspired by looking in the TouchGFX application templates for F412 or F496. They also use FMC displays.

Go to the TouchGFX Designer and start a new project for one of these boards and take a look into the code.

Regards

MKoca.1
MKoca.1Author
Senior
December 16, 2020

@Flemming Gram CHRISTENSEN​ 

I have repeatedly read the FMC configuration and tried to implement it. I think my main problem is that the flushFrameBuffer function of the interrupt I created is not dropping. So my code never goes into that function. There are also 2 flushFrameBuffer functions. One I think is in generatedHal. And this function has DMA settings. I don't know how to fill this function when I don't use DMA.

MKoca.1
MKoca.1Author
Senior
December 17, 2020

Hello again, everyone. Dear @Flemming Gram CHRISTENSEN​  As in the example about FMC drivers, I have made my settings and adjusted the functions. I also arranged the flushFrameBuffer and copyFrameBufferBlockToLCD functions for myself. But in getClientFrameBuffer function return frameBuffer0 always returns 0 and my screen remains black. I don't understand where the event frameBuffer0 is populated by TouchGFX ????

Flemming Gram CHRISTENSEN
ST Employee
December 17, 2020

Hello.

I am not sure I fully understand your question here.

Does getClientFrameBuffer return zero? Or a pointer to memory where you have zero?

The framebuffer is drawn to by the Widgets. So if you have created a Screen with the Designer, you can try to set a breakpoint in Screen1ViewBase::Screen1ViewBase() to see that it is actually created.

Even better is to insert a tick function in Screen1View. This should be called multiple times:

class Screen1View {

virtual void handleTickEvent() { }

};

If you don't hit this function many times, your event loop is not running.

If TouchGFX does not have the correct framebuffer pointer, it can of course not draw anything.

From the F412 template, the framebuffer is passed here:

void TouchGFXGeneratedHAL::initialize()

{

  HAL::initialize();

  registerEventListener(*(Application::getInstance()));

  setFrameBufferStartAddresses((void*)frameBuf, (void*)0, (void*)0);

You should have something similar in your project.

MKoca.1
MKoca.1Author
Senior
December 17, 2020

@Flemming Gram CHRISTENSEN​ 

yes GetClientFrameBuffer always returns zero. Also, Screen1ViewBase :: Screen1ViewBase () does not have a cut. What could be the reason for this? I am sending my adjustments in the attachment.

0693W000006G4yaQAC.jpg0693W000006G4yVQAS.jpg0693W000006G4yGQAS.jpg0693W000006G4y1QAC.jpg