cancel
Showing results for 
Search instead for 
Did you mean: 

LCD flickering issues & STemWin hardfaults.

Peter Morrow
Associate II
Posted on January 12, 2018 at 13:55

Hi,

We are using a 216Mhz F7 (STM32F746NGH6) on a custom board to interface with an LCD (Winstar WF70GTIAGDNG0).  We are having issues with the screen flickering, often the screen will display a flickering green block at the bottom of the screen.  I'm wondering if:

#1 Our clock configuration is correct.

#2 Memory bandwidth is being exceeded (we are using STemWin - whilst the flickering is annoying STeMwin is hardfaulting a lot in random locations in the binary blob).

Our LCD requires at least a 26.7Mhz clock, for this we've got the following system_clock config (generated via cubemx):

void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct;

RCC_ClkInitTypeDef RCC_ClkInitStruct;

RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;

/**Configure the main internal regulator output voltage

*/

__HAL_RCC_PWR_CLK_ENABLE();

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

/**Initializes the CPU, AHB and APB busses clocks

*/

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLM = 25;

RCC_OscInitStruct.PLL.PLLN = 432;

RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;

RCC_OscInitStruct.PLL.PLLQ = 9;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

_Error_Handler(__FILE__, __LINE__);

}

/**Activate the Over-Drive mode

*/

if (HAL_PWREx_EnableOverDrive() != HAL_OK)

{

_Error_Handler(__FILE__, __LINE__);

}

/**Initializes the CPU, AHB and APB busses clocks

*/

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK)

{

_Error_Handler(__FILE__, __LINE__);

}

PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC|RCC_PERIPHCLK_CLK48;

PeriphClkInitStruct.PLLSAI.PLLSAIN = 108;

PeriphClkInitStruct.PLLSAI.PLLSAIR = 2;

PeriphClkInitStruct.PLLSAI.PLLSAIQ = 2;

PeriphClkInitStruct.PLLSAI.PLLSAIP = RCC_PLLSAIP_DIV2;

PeriphClkInitStruct.PLLSAIDivQ = 1;

PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;

PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48SOURCE_PLL;

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)

{

_Error_Handler(__FILE__, __LINE__);

}

/**Configure the Systick interrupt time

*/

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

/**Configure the Systick

*/

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

/* SysTick_IRQn interrupt configuration */

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}

Our LTDC driver is effectively this: 

https://github.com/vpecanins/stm32f7-stemwin/blob/master/Src/LCDConf.c

  which is taken from the stemwin library.

The secondary worry is that we are blowing our memory bandwidth, we are using STeMwin 5.4.0 with GUI ram hosted in external ram.  We are using MT48LC4M32B2B5-6A as the external RAM (same as the 46g discovery board).

Any pointers as to where I should be looking to try to fix both these issues (flickering and crashes).

Please let me know if any more information would make this issue easier to troubleshoot.

Thanks,

Peter.

1 REPLY 1
Posted on January 12, 2018 at 14:37

Memory bandwidth is being exceeded (?)

If you use two planes, use only one.

Use a less memory-intensive pixel format.

JW