mirror of https://github.com/ARMmbed/mbed-os.git
[XXX_F10XRB] enhance RTC API
Add a define to select between LSE or LSI
parent
10c9469b6d
commit
a3ff2c53fe
|
@ -121,7 +121,7 @@
|
||||||
|
|
||||||
|
|
||||||
#if !defined (LSE_STARTUP_TIMEOUT)
|
#if !defined (LSE_STARTUP_TIMEOUT)
|
||||||
#define LSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for LSE start up, in ms */
|
#define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */
|
||||||
#endif /* HSE_STARTUP_TIMEOUT */
|
#endif /* HSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
#define DEVICE_SPISLAVE 1
|
#define DEVICE_SPISLAVE 1
|
||||||
|
|
||||||
#define DEVICE_RTC 1
|
#define DEVICE_RTC 1
|
||||||
|
#define DEVICE_RTC_LSI 0
|
||||||
|
|
||||||
#define DEVICE_PWMOUT 1
|
#define DEVICE_PWMOUT 1
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
#define DEVICE_SPISLAVE 1
|
#define DEVICE_SPISLAVE 1
|
||||||
|
|
||||||
#define DEVICE_RTC 1
|
#define DEVICE_RTC 1
|
||||||
|
#define DEVICE_RTC_LSI 0
|
||||||
|
|
||||||
#define DEVICE_PWMOUT 1
|
#define DEVICE_PWMOUT 1
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,19 @@ void rtc_init(void)
|
||||||
|
|
||||||
RtcHandle.Instance = RTC;
|
RtcHandle.Instance = RTC;
|
||||||
|
|
||||||
|
#if !DEVICE_RTC_LSI
|
||||||
|
// Enable LSE Oscillator
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Mandatory, otherwise the PLL is reconfigured!
|
||||||
|
RCC_OscInitStruct.LSEState = RCC_LSE_ON; // External 32.768 kHz clock on OSC_IN/OSC_OUT
|
||||||
|
RCC_OscInitStruct.LSIState = RCC_LSI_OFF;
|
||||||
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) == HAL_OK) { // Check if LSE has started correctly
|
||||||
|
// Connect LSE to RTC
|
||||||
|
__HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE);
|
||||||
|
} else {
|
||||||
|
error("Cannot initialize RTC with LSE\n");
|
||||||
|
}
|
||||||
|
#else
|
||||||
// Enable Power clock
|
// Enable Power clock
|
||||||
__HAL_RCC_PWR_CLK_ENABLE();
|
__HAL_RCC_PWR_CLK_ENABLE();
|
||||||
|
|
||||||
|
@ -55,27 +68,20 @@ void rtc_init(void)
|
||||||
// Reset Backup domain
|
// Reset Backup domain
|
||||||
__HAL_RCC_BACKUPRESET_FORCE();
|
__HAL_RCC_BACKUPRESET_FORCE();
|
||||||
__HAL_RCC_BACKUPRESET_RELEASE();
|
__HAL_RCC_BACKUPRESET_RELEASE();
|
||||||
|
|
||||||
// Enable LSE Oscillator
|
// Enable LSI clock
|
||||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
|
||||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Mandatory, otherwise the PLL is reconfigured!
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Mandatory, otherwise the PLL is reconfigured!
|
||||||
RCC_OscInitStruct.LSEState = RCC_LSE_ON; // External 32.768 kHz clock on OSC_IN/OSC_OUT
|
RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
|
||||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) == HAL_OK) {
|
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
|
||||||
// Connect LSE to RTC
|
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
|
||||||
__HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE);
|
error("Cannot initialize RTC with LSI\n");
|
||||||
} else {
|
}
|
||||||
// Enable LSI clock
|
// Connect LSI to RTC
|
||||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
|
__HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSI);
|
||||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Mandatory, otherwise the PLL is reconfigured!
|
// This value is LSI typical value. To be measured precisely using a timer input capture for example.
|
||||||
RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
|
#endif
|
||||||
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
|
|
||||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
|
|
||||||
error("RTC error: LSI clock initialization failed.");
|
|
||||||
}
|
|
||||||
// Connect LSI to RTC
|
|
||||||
__HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSI);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable RTC
|
// Enable RTC
|
||||||
__HAL_RCC_RTC_ENABLE();
|
__HAL_RCC_RTC_ENABLE();
|
||||||
|
|
||||||
|
@ -88,6 +94,7 @@ void rtc_init(void)
|
||||||
|
|
||||||
void rtc_free(void)
|
void rtc_free(void)
|
||||||
{
|
{
|
||||||
|
#if DEVICE_RTC_LSI
|
||||||
// Enable Power clock
|
// Enable Power clock
|
||||||
__PWR_CLK_ENABLE();
|
__PWR_CLK_ENABLE();
|
||||||
|
|
||||||
|
@ -100,6 +107,7 @@ void rtc_free(void)
|
||||||
|
|
||||||
// Disable access to Backup domain
|
// Disable access to Backup domain
|
||||||
HAL_PWR_DisableBkUpAccess();
|
HAL_PWR_DisableBkUpAccess();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Disable LSI and LSE clocks
|
// Disable LSI and LSE clocks
|
||||||
RCC_OscInitTypeDef RCC_OscInitStruct;
|
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||||||
|
|
Loading…
Reference in New Issue