This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SystemClock_Config issue on STM32f769NI only for 200mhz sysclk and higher

Hi All,
Due to CPU package change, I tried to change the CPU from Keil project configuration. But the new project does not work. So when I check the problem part, it is SystemClock_Config() where I am configuring the sysclk. I want to achieve 200mhz system clock.
To be more clear, it is a STM32f769NI based project which is not working while stm32f769BI based project is working without any issue. I have not changed anything but only the CPU. I have verified with two of my new hardware's. Unfortunately I do not have any evaluation board to verify this.

To make it simpler, I copied RTX blink example program with 25MHZ clock. Since my hardware is 8mhz, I just reconfigured those clock portion such as OS_CLOCK = 200mhz, Xtal = 8mhz, HSE_VALUE = 8mhz.

When I tried to configure the CCR to achieve HCLK = 200MHZ, It always goes to Hardfault_handler or Can not stop debugger state whether the clock source is HSI or HSE.
Using MCO2 on PC9 pin, I am able to see the PLLCLK is generating 200MHZ when it does not completely dead. with the AHB prescaller is set to 1, HCLK is supposed to be same as PLLCLK.

I compared the working board CPU RCC registers and not working board CPU RCC registers. It is more or less same(Same in the necessary section).

Just to try, I reduced the clock to 150MHZ by changing the PLLM and PLLN, I am able to see the LED blinking. And I am able to see the LED blinking when I comment out the OS functions or use MicroLIB with RTX with 200mhz sysclk.

When I tried to trace the hardfault source, it is showing different unknown address different time.

Can anyone help me understand the problem?

My SystemClock_Config code which was generated by stcube utility.

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**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 = 4;
  RCC_OscInitStruct.PLL.PLLN = 200;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 2;
  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_6) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_1);

    /**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);