cancel
Showing results for 
Search instead for 
Did you mean: 

Adjusting frame rate fps of display for TouchGFX

HPam.1
Associate II

Hello everyone, I am trying to adjust the frame rate(to a lower fps) of the display on STM32F429i discovery board. I saw from this manual

cd00278141-qvga-tftlcd-direct-drive-using-the-stm32f10xx-fsmc-peripheral-stmicroelectronics.pdf saying there's a tim3 clock used for adjusting the frame rate of the display. So i try to find any corresponding timer that may be used for refreshing the display, the only one i found is in clock configuration. If this is the part to modify the frame refresh, how can i calculate required frequency for my target fps

0693W000001sH0oQAE.png

My goal is to reduce the mcu usage to the smallest % possible, so that my adc can achieve maximum sampling rate.

Edit: My display only have 3 screens, some buttons and text area for user input. I do not need a very fluid display

1 ACCEPTED SOLUTION

Accepted Solutions

​Hi. Yeah, change the pixel clock until you have the desired vsync frequency (You may also want to change porch timings). e.g. 16,66 ms = 60Hz

This will give you a maximum framerate, relative to that frequency. You'll most likely always have that framerate because of your simple application.

/Martin

View solution in original post

3 REPLIES 3
Martin KJELDSEN
Chief III

The touchgfx render time is tied closely to the VSYNC of the display. For simple applications, 16ms (60hz update) is achievable. By lowering the pixelclock you can measure the vsync/render-time for your concrete application through signals exposed by TouchGFX. Lowering the pixelclock (highlighted in your image) is one way to achieve a lower update frequency and thus a lower, possible framerate.

in the GPIO class that's a part of your project you can toggle a GPIO and measure with your scope the actual update frequency. Here's an implementation of the GPIO class that toggles LEDs on internal touchgfx VSYNC, RENDER TIME and FRAME RATE signals.

void GPIO::set(GPIO_ID id)
{
    if (id == VSYNC_FREQ)
    {
        BSP_LED_Off(LED1);
    }
    else if (id == RENDER_TIME)
    {
        BSP_LED_Off(LED2);
    }
    else if (id == FRAME_RATE)
    {
        BSP_LED_Off(LED3);
    }
 
    gpioState[id] = 1;
}
 
void GPIO::clear(GPIO_ID id)
{
    if (id == VSYNC_FREQ)
    {
        BSP_LED_On(LED1);
    }
    else if (id == RENDER_TIME)
    {
        BSP_LED_On(LED2);
    }
    else if (id == FRAME_RATE)
    {
        BSP_LED_On(LED3);
    }
    gpioState[id] = 0;
}
 
void GPIO::toggle(GPIO_ID id)
{
    if (get(id))
    {
        clear(id);
    }
    else
    {
        set(id);
    }
}

If I understood correctly, I need to adjust the LCD- TFT clock to reduce the FPS to desired value, and simultaneously use a scope to monitor my configured gpio associated with the FRAME_RATE?

Thanks in advance!

​Hi. Yeah, change the pixel clock until you have the desired vsync frequency (You may also want to change porch timings). e.g. 16,66 ms = 60Hz

This will give you a maximum framerate, relative to that frequency. You'll most likely always have that framerate because of your simple application.

/Martin