cancel
Showing results for 
Search instead for 
Did you mean: 

Generating System Clock for STM32H745ZIT chip using LDO power supply.

ConfusedContrarian
Associate III

Hi, I've come across a few of these issues namely here but I haven't found a fix for my issue yet. I have a custom PCB based on the STM32H745ZIT6 chip which I wired up to be powered using the LDO power supply. However, I'm running into two problems at the moment:

  • Initially, the device kept getting bricked after I flashed the code on and I had to pull BOOT0 high to erase the chip. It seems in SystemClock_Config, when i step through to debug, the initialisation hangs on
  while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}

The Configuration function is shown here:

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 
  /** Supply configuration update enable
  */
  HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  /** Configure the main internal regulator output voltage
  */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
 
  while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  /** Macro to configure the PLL clock source
  */
  __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE);
  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  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 = 1;
  RCC_OscInitStruct.PLL.PLLN = 60;
  RCC_OscInitStruct.PLL.PLLP = 2;
  RCC_OscInitStruct.PLL.PLLQ = 5;
  RCC_OscInitStruct.PLL.PLLR = 2;
  RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3;
  RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  RCC_OscInitStruct.PLL.PLLFRACN = 0;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
                              |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
 
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  {
    Error_Handler();
  }
}

Regardless of me using the external HSE or the HSI, it doesn't make any difference at all. the program just hangs at the lne where it's waiting for the power flag.

My other issue is Cube IDE doesn't even bother to generate the peripheral clocks within ClockConfig but I guess this is moot if I can't configure the main core anyway.

Has anyone managed to find a fix for this?

2 REPLIES 2
TDK
Guru

The best suggestion from here was to run a CubeMX example that runs at 480MHz and see what it does and if it works.

https://community.st.com/s/question/0D50X0000BVpWdp/stm32h747-freezes-waiting-for-vosrdy

Report back if you figure it out please. I'm sure it's something dumb or undocumented.

If you feel a post has answered your question, please click "Accept as Solution".

I managed to figure it out. I generated the same project for a h745-nucleo board which I'd modified for LDO and that worked fine. Turns out I just needed to change the power supply for my PCB. For some reason, the clocks won't initialise with this powerbank I use even though it works with my other STM32 devices.