2021-09-27 06:09 AM
Hello,
I am struggling with getting a display connected to FMC bus up and running.
The problem is that the display remains black all the time.
I have followed the TouchGFX documentation, and implemented code according to TouchGFX AL Development. I used the scenario "FMC and SPI display Interface" and implemented the code described in that chapter.
I use STM32CubeMx for setup the hardware and generate code (for IAR EWB). Then TouchGFX Designer for generating graphics. Then remade code in STM32CubeMx, and then using IAR EWB to implement the rest. I have enabled FreeRTOS in STM32CubeMx, and the MX_TouchGFX_Process() is running in a task.
I have made setup code for the display (Winstar 2.4" 320x240 with ILI9341 driver). The setup code is tested, and I can send and recieve data to/from display.
Vsync (FMARK) is working and updating semaphore for touchgfx vsync (OSWrappers::signalVSync();).
I can see that tick() for touchGFX is updating constantly.
But display is constantly black.
I have made a simple screen in TouchGFX designer, simply showing an image. When I run the simulator in TouchGFX designer, it behaves as expected.
If I look into the touchGFX framebuffer, the entire buffer is 0, so it looks like it is never updated.
If I place a break point in TouchGFXHAL::flushFrameBuffer(), and then fill the framebuffer with e.g 0xf000 (blue), and then run the transfer code in TouchGFXHAL::flushFrameBuffer(), the display turns into blue. So from there is works. Filling of framebuffer seems to be done in the TouchGFX library, so there I can't debug.
Versions I have used:
STM32CubeMx: 6.3.0
TouchGFX Designer: 4.17.0
IAR EWB: 8.50.9
I am using STM32H7B3I-EVAL that we have made an adapterboard for with the display.
I am only using STM32H7's internal memory (both code and framebuffer data)
Any idea what is wrong?
Regards, Jan
Solved! Go to Solution.
2021-09-27 11:08 PM
Answering myself here,
This was unfortunately bug in by code.
I am using double framebuffer strategy, and in TouchGFXHAL::flushFrameBuffer() I had used getTFTFrameBuffer() instead of getClientFrameBuffer().
Then I always got the pointer to the start of framebuffer1 instead of pointer to the current buffer.
Using getClientFrameBuffer() fixed the problem, and I have picture on the screen.
Regards, Jan
2021-09-27 11:08 PM
Answering myself here,
This was unfortunately bug in by code.
I am using double framebuffer strategy, and in TouchGFXHAL::flushFrameBuffer() I had used getTFTFrameBuffer() instead of getClientFrameBuffer().
Then I always got the pointer to the start of framebuffer1 instead of pointer to the current buffer.
Using getClientFrameBuffer() fixed the problem, and I have picture on the screen.
Regards, Jan
2021-09-28 07:37 PM
Hello JRoyn.1,
Happy to see you found a solution :)
/Alexandre