cancel
Showing results for 
Search instead for 
Did you mean: 

Simulated output of image is not shown as it is on the display. (STM32F769NI)

Vins
Senior

Hi Community,

I have generated the Touch GFX project through STMCubeIDE. Getting correct output in simulator. Not getting image as it is (on the Touch GFX canvas) on the display.

I have attached the images for the reference.

9 REPLIES 9
Osman SOYKURT
ST Employee

Hello Vins,

Can you give more information about your configuration please ?

  • Which version of TouchGFX Designer do you use ?
  • Do you have internal/ external ram ?
  • Which framebuffer strategy do you use ?
  • Could you show me your clock config ?

/Osman

Osman SOYKURT
ST Software Developer | TouchGFX
MM..1
Chief III

Basic user mistake. Set default image angle to 90 / 0 based to your hw lcd orientation.

Hi @Osman SOYKURT​ 

1) Touch GFX Designer Version- 4.19.1.

2) Internal RAM.

3) Single Buffer.

4) 0693W00000NpaefQAB.png0693W00000NpaezQAB.png

@MM..1​ Already I checked with both the orientations, same results.

Realy you regenerate code after change

0693W00000NpceNQAR.pngand on all images have default ?

0693W00000NpcfQQAR.png

HP
Senior III

this looks more like a problem with your porch settings or the pixel depth.

you can clealy se *something* which means the system is running and the assets are there.

The skewing of the assets hints at some offset going wrong at the end of the line. Also - the bottom of the image shows 'random' noise which indicate memory without content.

@MM..1​ I regenerated and dumped the code. Same result. All images have default.

Sorry I now check your image more and you need check and correct LCD setup plus if using DSI use calculated values not real...
For example if LCD datasheet say horizontal sync 7 pixels you need in LTDC 7 corrected in code to 7-1 and in DSI
7 x DSICLK/DOTCLK rounded up.
MM..1
Chief III

I dont like DSI command mode, but part of your code that maybe is source for trouble

    void HAL_DSI_EndOfRefreshCallback(DSI_HandleTypeDef* hdsi)
    {
        updateRegion++;
        if (updateRegion < 4)
        {
            DSI->WCR &= ~(DSI_WCR_DSIEN);
            LTDC_Layer1->CFBAR = ((uint32_t)currFbBase) + 200 * 2 * updateRegion;
 
            uint16_t REAL_WIDTH = 200;
            uint16_t ADJUSTED_WIDTH = 200;
            if (updateRegion == 3)
            {
                ADJUSTED_WIDTH += 32;
            }
 
            LTDC->AWCR = ((ADJUSTED_WIDTH + 2) << 16) | 0x1E2; //adj
            LTDC->TWCR = ((REAL_WIDTH + 2 + 1 - 1) << 16) | 0x1E3;
            LTDC_Layer1->WHPCR = ((REAL_WIDTH + 2) << 16) | 3;
            LTDC_Layer1->CFBLR = ((832 * 2) << 16) | ((REAL_WIDTH) * 2 + 3);
 
            LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR;
            LCD_SetUpdateRegion(updateRegion);
 
            DSI->WCR |= DSI_WCR_DSIEN;
            HAL_DSI_Refresh(hdsi);
        }
        else
        {
            // Otherwise we are done refreshing.
 
            DSI->WCR &= ~(DSI_WCR_DSIEN);
            LTDC_Layer1->CFBAR = (uint32_t)currFbBase;
 
            uint16_t WIDTH = 200;
            LTDC->AWCR = ((WIDTH + 2) << 16) | 0x1E2;
            LTDC->TWCR = ((WIDTH + 2 + 1) << 16) | 0x1E3;
            LTDC_Layer1->WHPCR = ((WIDTH + 2) << 16) | 3;
            LTDC_Layer1->CFBLR = (((832 * 2) << 16) | ((WIDTH * 2) + 3));
            LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR;
            LCD_SetUpdateRegion(0);
            DSI->WCR |= DSI_WCR_DSIEN;
            GPIO::clear(GPIO::VSYNC_FREQ);
 
            displayRefreshing = false;
            if (HAL::getInstance())
            {
                // Signal to the framework that display update has finished.
                HAL::getInstance()->frontPorchEntered();
            }
        }

plus check priority setup for IRQs. LCD 800x480 ?