2020-10-28 05:38 AM
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
Solved! Go to Solution.
2020-10-28 06:55 AM
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.
2020-10-28 06:09 AM
>>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)
{}
}
}
2020-10-28 06:42 AM
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
2020-10-28 06:55 AM
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.
2020-10-28 07:50 AM
Sorry i didnt mentioned that i want SPL Based. My Mistake
Rohit