cancel
Showing results for 
Search instead for 
Did you mean: 

TouchGFX + Custom Board: TouchGFX_taskEntry() Never Leaves OSWrappers::waitForVSync()

KMew
Senior III

Hello,

I am currently testing my custom board that utilizes the STM32H7B3IIT6 MCU. Since it is a custom board, I generated the code via CubeMX with the TouchGFX 4.20.0 software package. When I try to run the firmware, I noticed that I never entered the model::tick() function in the Model.cpp function. I ran the debugger and, in the taskEntry code, I have a function OSWrappers::waitForVSync() and the firmware stays in that function. It never gets past there.

This function exists in my "custom board" bring up where I used the STM32H7B3I-EVAL evaluation board and it does not get stuck in it. I acknowledge that TouchGFX know the evaluation board's pinout and specific configuration. My custom board cannot use that, so I copied the files from the evaluation board's working code and pasted them into my custom board project.

I have attached my .ioc file for reference, along with the snippet of my taskEntry code.

void TouchGFXHAL::taskEntry()
{
    enableLCDControllerInterrupt();
    enableInterrupts();
 
    OSWrappers::waitForVSync();
    backPorchExited();
 
    /* Assert display enable LCD_DISP_CTRL pin */
    //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
    /* Assert back light LCD_BL_CTRL pin */
    //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
 
    for (;;)
    {
        OSWrappers::waitForVSync();
        backPorchExited();
    }
}

When I went into the waitForVSync() function, I notice I specifically get stuck in this portion of the function:

osMessageQueueGet(vsync_queue, &dummyGet, 0, osWaitForever)

void OSWrappers::waitForVSync()
{
    uint32_t dummyGet;
    // First make sure the queue is empty, by trying to remove an element with 0 timeout.
    osMessageQueueGet(vsync_queue, &dummyGet, 0, 0);
 
    // Then, wait for next VSYNC to occur.
    osMessageQueueGet(vsync_queue, &dummyGet, 0, osWaitForever);
}

Can anyone help me diagnose what would cause this?

For further info, I am using a Rocktech RK043FN66HS-CTG display, which is capable of doing up to RGB888. In the firmware, I am limiting it to RGB565 for testing.

1 ACCEPTED SOLUTION

Accepted Solutions
KMew
Senior III

Hello Everyone,

I solved the issue. It was a discrepency between the LTDC and the TouchGFX Software Package configuration settings in the CubeMX. One was RGB888 and the other was RGB565. Once I aligned those, the issue went away.

View solution in original post

1 REPLY 1
KMew
Senior III

Hello Everyone,

I solved the issue. It was a discrepency between the LTDC and the TouchGFX Software Package configuration settings in the CubeMX. One was RGB888 and the other was RGB565. Once I aligned those, the issue went away.