Skip to main content
Vins
Associate III
May 6, 2022
Question

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

  • May 6, 2022
  • 9 replies
  • 2281 views

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.

This topic has been closed for replies.

9 replies

Osman SOYKURT
ST Technical Moderator
May 6, 2022

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

ST Software Developer | TouchGFX
Vins
VinsAuthor
Associate III
May 9, 2022

Hi @Osman SOYKURT​ 

1) Touch GFX Designer Version- 4.19.1.

2) Internal RAM.

3) Single Buffer.

4) 0693W00000NpaefQAB.png0693W00000NpaezQAB.png

MM..1
Super User
May 6, 2022

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

Vins
VinsAuthor
Associate III
May 9, 2022

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

MM..1
Super User
May 9, 2022

Realy you regenerate code after change

0693W00000NpceNQAR.pngand on all images have default ?

0693W00000NpcfQQAR.png

HP_it
Senior II
May 9, 2022

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
Super User
May 10, 2022

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 ?