HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct){/*----------------------------- HSI Configuration --------------------------*/if(((RCC_OscInitStruct->OscillatorType)& RCC_OSCILLATORTYPE_HSI)== RCC_OSCILLATORTYPE_HSI){/* Check the parameters */assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */if((__HAL_RCC_GET_SYSCLK_SOURCE()== RCC_SYSCLKSOURCE_STATUS_HSI)||((__HAL_RCC_GET_SYSCLK_SOURCE()== RCC_SYSCLKSOURCE_STATUS_PLLCLK)&&(__HAL_RCC_GET_PLL_OSCSOURCE()== RCC_PLLSOURCE_HSI_DIV2))){/* When HSI is used as system clock it will not disabled */if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY)!= RESET)&&(RCC_OscInitStruct->HSIState != RCC_HSI_ON)){return HAL_ERROR;}/* Otherwise, just the calibration is allowed */else{/* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/__HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);}}else{/* Check the HSI State */if(RCC_OscInitStruct->HSIState != RCC_HSI_OFF){/* Enable the Internal High Speed oscillator (HSI). */__HAL_RCC_HSI_ENABLE();/* Get Start Tick */
tickstart =HAL_GetTick();/* Wait till HSI is ready */while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY)== RESET){if((HAL_GetTick()- tickstart )> HSI_TIMEOUT_VALUE){return HAL_TIMEOUT;}}/* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/__HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);}else{/* Disable the Internal High Speed oscillator (HSI). */__HAL_RCC_HSI_DISABLE();/* Get Start Tick */
tickstart =HAL_GetTick();/* Wait till HSI is disabled */while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY)!= RESET){if((HAL_GetTick()- tickstart )> HSI_TIMEOUT_VALUE){return HAL_TIMEOUT;}}}}}}