Skip to main content
Visitor II
October 28, 2020
Solved

How to Enable HSE with PLL & without PLL for Stm32f072 & Stm32f103 MCU

  • October 28, 2020
  • 3 replies
  • 3394 views

HI,

All , if any one have done HSE enabling in Stm32f072 & Stm32f103 MCU please share.

As what ever examples available are for HSI clock only .

So please some one revert .

Waiting

Rohit

    This topic has been closed for replies.
    Best answer by Tesla DeLorean

    HAL

    You didn't specify you wanted SPL, sorry not psychic

    Look in the SPL examples, definitely in there, typically in the SystemInit() code at a register level, and SetSysClock() in a somewhat less terse form

    STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Examples\RCC\RCC_Example\system_stm32f0xx.c

    STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\RCC\RCC_ClockConfig

    For HSE, turn HSE ON in RCC->CR and then wait for it to come ready, then select the HSE as the system clock, and wait for it to engage.

    Don't want the PLL, then don't start it, or select it as the system clock.

    Really not super complicated.

    3 replies

    Graduate II
    October 28, 2020

    >>As what ever examples available are for HSI clock only .

    Looking in the wrong places..

    F07x

    /**
     * @brief System Clock Configuration
     * The system Clock is configured as follow:
     *
     * - PLL(HSE) used as clock source
     * - System Clock source = PLL (HSE)
     * - SYSCLK(Hz) = 48000000
     * - HCLK(Hz) = 48000000
     * - AHB Prescaler = 1
     * - APB1 Prescaler = 1
     * - HSE Frequency(Hz) = 8000000
     * - PREDIV = 1
     * - PLLMUL = 6
     * - Flash Latency(WS) = 1
     *
     * @param None
     * @retval None
     */
    static void SystemClock_Config(void)
    {
     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
     
     /* Enable HSE Oscillator and activate PLL with HSE as source
     PLLCLK = (8 * 6) / 1) = 48 MHz */
     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.PLLMUL = RCC_PLL_MUL6;
     RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
     HAL_RCC_OscConfig(&RCC_OscInitStruct);
     
     /* Select PLL as system clock source and configure the HCLK and PCLK1
     clock dividers */
     RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1);
     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
     HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);
    }

    Using HSE directly

    static void SystemClock_Config(void)
    {
     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
     
     /* Enable HSE Oscillator with HSE as MCU source = 8 MHz */
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
     HAL_RCC_OscConfig(&RCC_OscInitStruct);
     
     /* Select HSE as system clock source and configure the HCLK and PCLK1
     clock dividers */
     RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1);
     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
     HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);
    }

    L07x

    /**
     * @brief System Clock Configuration
     * The system Clock is configured as follow :
     * System Clock source = PLL (HSE)
     * SYSCLK(Hz) = 32000000
     * HCLK(Hz) = 32000000
     * AHB Prescaler = 1
     * APB1 Prescaler = 1
     * APB2 Prescaler = 1
     * Flash Latency(WS) = 1
     * Main regulator output voltage = Scale1 mode
     * @retval None
     */
    void SystemClock_Config(void)
    {
     RCC_ClkInitTypeDef RCC_ClkInitStruct ={0};
     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
     
     /* Enable Power Control clock */
     __HAL_RCC_PWR_CLK_ENABLE();
     
     /* The voltage scaling allows optimizing the power consumption when the device is
     clocked below the maximum system frequency, to update the voltage scaling value
     regarding system frequency refer to product datasheet. */
     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
     
     /* Enable HSE Oscillator */
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
     RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8;
     RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV2;
     if (HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK)
     {
     /* Initialization Error */
     while(1)
     {}
     }
     
     /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
     clocks dividers */
     RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | 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)
     {
     /* Initialization Error */
     while(1)
     {}
     }
    }

    RKade.1Author
    Visitor II
    October 28, 2020

    Clive ,

    Is it HAL Based? What you suggested? Or Standard Peripheral Based?

    it seems examples you shows is HAL BaSED, But i need is Standard Peripheral Based.

    Rohit

    Graduate II
    October 28, 2020

    HAL

    You didn't specify you wanted SPL, sorry not psychic

    Look in the SPL examples, definitely in there, typically in the SystemInit() code at a register level, and SetSysClock() in a somewhat less terse form

    STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Examples\RCC\RCC_Example\system_stm32f0xx.c

    STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\RCC\RCC_ClockConfig

    For HSE, turn HSE ON in RCC->CR and then wait for it to come ready, then select the HSE as the system clock, and wait for it to engage.

    Don't want the PLL, then don't start it, or select it as the system clock.

    Really not super complicated.

    RKade.1Author
    Visitor II
    October 28, 2020

    Sorry i didnt mentioned that i want SPL Based. My Mistake

    Rohit