cancel
Showing results for 
Search instead for 
Did you mean: 

How to stop flicker on STM32F769 disco board

PG.13
Associate II

Hello!

I'm looking for info about how to write a flicker free program on STM32769 disco board.

There are a few samples in the latest firmware (stored in repository / STM32Cube FV 1.21...).

I tried all the samples for DSI, in cmd mode or video mode, all of them.

But I can always see a little glitch when switching the center 320 x 240 image.

There is always a kind of oblique transition area.

As I thought it might be my eye and not the hardware, I took a video of it.

By advancing frame by frame, I can always find a transition frame.

See attachment. Although there is no reason for that kind of oblique area to happen,

it happens.

It happens in double buffer as well as in simple buffer, in any of the existing programs.

I could understand that both image are seen at the transition due to the camera

capture time, but I can't really understand this artefact.

Is there a way to completely avoid flicker?

Is there a bug in the firmware v1.21 pack?

Pascal

0690X000006C0W9QAK.png

3 REPLIES 3

Hello Pascal,

The DSI in cmd or video mode examples in LCD_DSI folder does not handle the tearing effect that you can see on the picture . The solution is to use the method in LCD_DSI_CmdMode_TearingEffect.

Tearing effect happen when the Framebuffer is drawn by a drawing process and at the same time is red and displayed on the panel. The drawing process in the Frame buffer must be synchronized on the reading process. In the DSI video mode the lines sent to the FB are done at pixel clock rate and the display is also reading and displaying at the same rate.  This explain (not very direct I agree) why the old and the new image is split along with an oblique line.

The F769 Disco contains a OTM8009a display controller with an internal GRAM that contains the frame to display. The panel can send on DSI a TE signal when the display has red a given line that is programmable (scane line). The Frame buffer in the MCU (or ext SRDAM)  can be split into 2 half and when one part is red by LTDC and sent the GRAM of the display controller (located on the display module) the other part is drawn by the MCU.

​You have an example in LCD_DSI_CmdMode_TearingEffect.

The FB is 800colomns x480 lines (landscape) and is sent into display module GRAM in 480colx800 lines (DCS MARCTR=0x60 config cf data sheet for configuration of MCU scanning of GRAM)

The LTDC reads and sends the pixels of left part of the FB (400colx480lines) to the GRAM of display controller, during this time the display controller reads & displays the pixels of the second half part GRAM pixels (GRAM is split also in two). When LTDC has finished to send the first half FB it stops (DSI adaptedCommand mode). The next transfer of second half buffer by LTDC waits for a signal. It waits the Half GRAM has been red and displayed on the panel by the display module.

When display controller (on display module) has red 533 line of the GRAM it triggers a TE DSI interrupt (via DSI link) upon which the we reverse the part to draw and to display.

Br,

Emmanuel 

PG.13
Associate II

Hello Emmanuel!

Thanks for your reply. Apparently this app is the only one I didn't try....

Thanks for the explanation. I compiled it and indeed it does what I want.

Or at lease my eyes are not fast enough to see anything else than the pictures.

You can mark this as solved.

Best regards,

Pascal

PG.13
Associate II

Hello Emmanuel!

By the way, just for my info:

There are other examples involving double buffering.

Apparently the non-tearing is the only solution to have a flicker free transition.

In this case, what's the point of doing double buffering?

Thanks,

Pascal