Than you, but it’s provided by a lot of contributors too!
It should be the clock of the FSMC periphery, not the output the clock (clock of the parallel bus). The output clock is typically ~5 MHz for this kind of display. See STM Application note.
The refresh time is the sum of 2 factors:
- Rendering time: depends on what needs to be rendered.
- Display refresh time: time send the rendered data to the display
Display refresh time can be easily calculated.
The screen has 480x320 = 153,600 pixel. To send them with 5MHz takes 31 ms (assuming 16 bit-parallel port and 16 color depth).
Rendering time can vary a lot depending on the complexity of the UI. Let’s assume 20 instructions/pixel.
480 x 320 x 20 / 72M = 42 ms.
In total it is rendering time + display refresh time = 31 ms + 42 ms = 73 ms = 14 FPS. It’s when the whole screen is refreshed. If you press a button only its small area will be refreshed (e.g. 100x50 px)
However, if you use more objects, opacity, shadow, and other effects, rendering time can increase dramatically. I could easily measure 100 ms rendering time with an STM32F769 and 800x480 TFT using advanced effects.
You can reduce the total time by using DMA to send the data to the FSMC port. It allows LVGL to render into an other buffer while DMA works in the background. This way a total time will be MAX(rendering time, display refresh time)