Skip to main content
TS1
Associate
August 13, 2018
Question

Bug report: PLL configuration in HAL_RCC_OscConfig() returns HAL_ERROR, if HSE is configured and PLL is the system clock source

  • August 13, 2018
  • 2 replies
  • 1042 views

Working with the STM32F429 Discovery board and STMCube_FW_F4_V1.21.0 I've got the same problem several times.

If I use the main.c provided with the application examples, the code will run into an endless loop after calling HAL_RCC_OscConfig and taking care of the return value.

The program works as expected, if the return value is ignored.

The configuration of the PLL causes this behaviour:

The check, if the PLL is used as system clock source will go to the else path and returns HAL_ERROR. The calling function expects HAL_OK.

This topic has been closed for replies.

2 replies

Khouloud GARSI
Technical Moderator
August 14, 2018

Hi @Torsten Schönitz​ ,

I'm not able to reproduce your issue. The "HAL_ERROR" should not be called if everything is configured correctly (I'm supposing your board is ok).

For further debug, you may share a project that is not working for you, I will check it using our HW.

Khouloud.

TS1
TS1Author
Associate
August 15, 2018

Hi Khouloud,

I'm new to this community and just don't know, how to share the whole project.

But perhaps you can tell me, what should happen, when the function HAL_RCC_OscConfig () comes to the configuration of the PLL:

 /*-------------------------------- PLL Configuration -----------------------*/
 /* Check the parameters */
 assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
 if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
 {
 /* Check if the PLL is used as system clock or not */
 if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL)
 {
 if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
 {
 /* Check the parameters */
 assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
 assert_param(IS_RCC_PLLM_VALUE(RCC_OscInitStruct->PLL.PLLM));
 assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN));
 assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP));
 assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));

In my projects the if-statement (if PLL is used as system clock) is false, because the system clock source is equal to RCC_CFGR_SWS_PLL. So the else path will be selected, that is returning HAL_ERROR.

The projects are working as expected, if I ignore the return value in the calling function.

Torsten