Skip to main content
Visitor II
December 13, 2022
Question

STM32L051 halt on HAL_RCC_ClockConfig

  • December 13, 2022
  • 5 replies
  • 3102 views

Hello folks,

I have an issue with STM32L051C8T6 - processor halt always on HAL_RCC_ClockConfig verification and have no idea where it's coming from.

I made a simple blink project with only two lines of code as a new CubeIDE project (all defaults) with a basic configuration:

* PB5, 8 & 9 are configured as output;

* Clock config with internal clock;

SystemClock_Config();
 
 /* USER CODE BEGIN SysInit */
 
 /* USER CODE END SysInit */
 
 /* Initialize all configured peripherals */
 MX_GPIO_Init();
 /* USER CODE BEGIN 2 */
 
 /* USER CODE END 2 */
 
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 /* USER CODE END WHILE */
 
 /* USER CODE BEGIN 3 */
	 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9 );
	 HAL_Delay(1000);
 }
 /* USER CODE END 3 */
}
 
/**
 * @brief System Clock Configuration
 * @retval None
 */
void SystemClock_Config(void)
{
 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 
 /** Configure the main internal regulator output voltage
 */
 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 
 /** Initializes the RCC Oscillators according to the specified parameters
 * in the RCC_OscInitTypeDef structure.
 */
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
 RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_3;
 RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 
 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
 {
 Error_Handler();
 }
}

The full Cube project is attached - any help is highly appreciated!!!

Many thanks!

Dave

Dave

BTW - I ran same code with Keil on simulation and the results are the same, so it's not board related.

    This topic has been closed for replies.

    5 replies

    Graduate II
    December 13, 2022

    Maybe very low PLL try without it or reconfig

     RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_3;
     RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;

    DNiko.1Author
    Visitor II
    December 14, 2022

    Thanks a lot, MM seems the problem is definitely in PLL. I tried many different configurations but couldn't get it to work. 

    0693W00000WKzDnQAL.pngI ended up disabling the PLL and everything went fine - but it shouldn't have.

    I'll share below a working clock conf because it took me a long time to get something running that should work without any problems...maybe I'll go back to SAMD21 again...it seems to me that the ST folks haven't tuned up their software

    Once again - many thanks!

    {
     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
     
     /** Configure the main internal regulator output voltage
     */
     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
     
     /** Initializes the RCC Oscillators according to the specified parameters
     * in the RCC_OscInitTypeDef structure.
     */
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
     RCC_OscInitStruct.HSIState = RCC_HSI_ON;
     RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
     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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
     
     if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
     {
     Error_Handler();
     }
    }

    Super User
    December 13, 2022

    +

    set LSE drive level to high.

    DNiko.1Author
    Visitor II
    December 14, 2022

    Thank you AScha ... the RTC is not enabled at all.

    DNiko.1Author
    Visitor II
    December 15, 2022

    Hi folks,

    Any help is GREATLY appreciated!

    I set the MCU to 16 MHz using a PLL

    0693W00000WL6MhQAL.pngwhere halt at the CPU initialization. 

    System Clock Configuration
    ----------------------------------------------
    System Clock source	= PLLCLK
    HSI (mHz)		= 16
    PLL Source		= HSI
    PLL Mult		= 4
    PLL Div			= 4
    SYSCLK(mHz)		= 16
    HCLK(mHz)		= 16
    AHB Prescaler		= 1
    APB1 Prescaler		= 1
    APB2 Prescaler		= 1
    VDD(V)			= 3.3
    --------------------------------------------------------------
     
    void SystemClock_Config(void)
    {
     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
     
     /** Configure the main internal regulator output voltage
     */
     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
     
     /** Initializes the RCC Oscillators according to the specified parameters
     * in the RCC_OscInitTypeDef structure.
     */
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
     RCC_OscInitStruct.HSIState = RCC_HSI_ON;
     RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
     RCC_OscInitStruct.LSIState = RCC_LSI_ON;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
     RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_3;
     RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
     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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
     
     if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
     {
     Error_Handler();
     }
    }

    I decided to dig deeper and figure out exactly where it freezes

    0693W00000WL6SmQAL.pngthen -> could not pass RCC->CFGR

    0693W00000WL6URQA1.pngCurrent values:

    0693W00000WL6ffQAD.png 

    0693W00000WL6jlQAD.png 

    The complete project is attached as well.

    Please help!

    Thank you,

    Dave

    Graduate II
    December 15, 2022

    How is your version STM32Cube_FW_L0_V1.12.1 or ?

    For PLL stability you need stable Vdd and primary Vdda

    DNiko.1Author
    Visitor II
    December 16, 2022

    I also thought it might be from the board and replaced the MCU on one of my NUCLEO-L053 with L051 and the result was the same.

    Yes, I'm using FW 1.12.1 but unfortunately, there are no examples and templates for L051

    Visitor II
    February 28, 2025

    I'm experiencing this exact same error on STM32F412. Have you been able to find a solution?