Enable the low power oscillator to work with an external crystal and to work as input for the RTC peripehral, ( its main use )
#include "bsp.h"
int main( void )
{
HAL_Init(); /*Init HAL library and call the HAL_MspInit function*/
while(1)
{
}
}
msps.c
void Msp_Init( void )
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
__HAL_RCC_SYSCFG_CLK_ENABLE();
__HAL_RCC_PWR_CLK_ENABLE();
/*Eanlble backup domain*/
HAL_PWREx_ControlVoltageScaling( PWR_REGULATOR_VOLTAGE_SCALE1 );
HAL_PWR_EnableBkUpAccess();
__HAL_RCC_LSEDRIVE_CONFIG( RCC_LSEDRIVE_LOW );
/*reset previous RTC source clock*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_NONE;
HAL_RCCEx_PeriphCLKConfig( &PeriphClkInitStruct );
/* Configure LSE/LSI as RTC clock source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON; /*enable LSE*/
RCC_OscInitStruct.LSIState = RCC_LSI_OFF; /*disable LSI*/
HAL_RCC_OscConfig( &RCC_OscInitStruct );
/*Set LSE as source clock for the RTC*/
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
HAL_RCCEx_PeriphCLKConfig( &PeriphClkInitStruct );
/* Peripheral clock enable for the RTC */
__HAL_RCC_RTC_ENABLE();
__HAL_RCC_RTCAPB_CLK_ENABLE();
}