cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F769I Evaluation and B-LCDAD-HDMI1 with TouchGFX 20.0.0 and CubeMX

LDini.1
Associate II

Hello,

we are aiming to display our TouchGFX Application on our F7469I Evaluation Board on an external Monitor. We wanted to make use of the B-LCDAD-HDMI1 adapter Board.

Up to now we did not manage to output any kind of signal to the monitor.

I attached our main.c our configuration file and our TouchGFXHal.cpp to this post.

Our Project was imported from TouchGFX designer, that way our display was instantly running and we only needed to implement the backend. The TouchGFX Designer Project automatically generated fitting "User Code" in the TouchGFXHal.cpp file.

To me it seems like, the default display is split in half and updated alternately.

Do we need to adapt this code to our adapter board or can we leave this code as it is.

We already tried to configure the ADV7533 via the BSP/Components/ Driver from the Repository. But there is still no signal.

adv7533ConfigTypeDef configuration;
  configuration.DSI_LANES = 2;
  configuration.HACT = OTM8009A_800X480_WIDTH;
  configuration.HBP = OTM8009A_480X800_HBP;
  configuration.HFP = OTM8009A_480X800_HFP;
  configuration.HSYNC = OTM8009A_480X800_HSYNC;
  configuration.VACT = OTM8009A_800X480_HEIGHT;
  configuration.VSYNC = OTM8009A_800X480_VSYNC;
  configuration.VBP = OTM8009A_800X480_VBP;
  configuration.VFP = OTM8009A_800X480_VFP;
  configuration.ASPECT_RATIO = ADV7533_ASPECT_RATIO_16_9;
  ADV7533_Configure(&configuration);
  ADV7533_Init();
  ADV7533_PowerOn();

Is there an example project we can learn from?

We are absolutely clueless on which things we need to adapt.

Thank you very much for any kind of help

Regards Luis

1 REPLY 1
LDini.1
Associate II

With Cube MX we managed to generate code for the selected Video Mode which seems to be necessary.

Via BSP Driver we also managed to start the Adapter Board, but up to now we did not manage to see any pixels on the screen.

void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef* hltdc)
    {
        if (!HAL::getInstance())
        {
            return;
        }
 
        if (LTDC->LIPCR == lcd_int_active_line)
        {
            //entering active area
            HAL_LTDC_ProgramLineEvent(hltdc, lcd_int_porch_line);
            HAL::getInstance()->vSync();
            OSWrappers::signalVSync();
 
            // Swap frame buffers immediately instead of waiting for the task to be scheduled in.
            // Note: task will also swap when it wakes up, but that operation is guarded and will not have
            // any effect if already swapped.
            HAL::getInstance()->swapFrameBuffers();
            GPIO::set(GPIO::VSYNC_FREQ);
        }
        else
        {
            //exiting active area
            HAL_LTDC_ProgramLineEvent(hltdc, lcd_int_active_line);
 
            // Signal to the framework that display update has finished.
            HAL::getInstance()->frontPorchEntered();
            GPIO::clear(GPIO::VSYNC_FREQ);
        }
    }

For my understanding this method creates an event which is supposed to update the LTDC, since we do not have a Tear.

Do we need to make more changes to the interrupt or even load the Framebuffer manually?