diff --git a/src/Makefile b/src/Makefile index b215cd547..3a5db774b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -502,6 +502,8 @@ ifeq ($(PCB), X9D) SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c + SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rtc.c + SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_pwr.c SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s ifeq ($(SDCARD), YES) diff --git a/src/x9d/board_x9d.h b/src/x9d/board_x9d.h index 4a84c6bf3..69e7b0db5 100644 --- a/src/x9d/board_x9d.h +++ b/src/x9d/board_x9d.h @@ -39,6 +39,8 @@ #include "./STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rcc.h" #include "./STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_gpio.h" #include "./STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_spi.h" +#include "./STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_rtc.h" +#include "./STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/inc/stm32f2xx_pwr.h" #include "./STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h" #include "hal.h" diff --git a/src/x9d/rtc_driver.cpp b/src/x9d/rtc_driver.cpp index 2a6561a67..3c40b9a2f 100644 --- a/src/x9d/rtc_driver.cpp +++ b/src/x9d/rtc_driver.cpp @@ -33,11 +33,51 @@ #include "../open9x.h" - void rtc_settime(struct gtm * t) { + RTC_TimeTypeDef RTC_TimeStruct; + RTC_DateTypeDef RTC_DateStruct; + + RTC_TimeStruct.RTC_Hours = t->tm_hour; + RTC_TimeStruct.RTC_Minutes = t->tm_min; + RTC_TimeStruct.RTC_Seconds = t->tm_sec; + RTC_DateStruct.RTC_Year = t->tm_year - 100; + RTC_DateStruct.RTC_Month = t->tm_mon; + RTC_DateStruct.RTC_Date = t->tm_mday; + + RTC_SetTime(RTC_Format_BIN, &RTC_TimeStruct); + RTC_SetDate(RTC_Format_BIN, &RTC_DateStruct); +} + +void rtc_gettime(struct gtm * t) +{ + RTC_TimeTypeDef RTC_TimeStruct; + RTC_DateTypeDef RTC_DateStruct; + + RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); + RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct); + + t->tm_hour = RTC_TimeStruct.RTC_Hours; + t->tm_min = RTC_TimeStruct.RTC_Minutes; + t->tm_sec = RTC_TimeStruct.RTC_Seconds; + t->tm_year = RTC_DateStruct.RTC_Year; + t->tm_mon = RTC_DateStruct.RTC_Month; + t->tm_mday = RTC_DateStruct.RTC_Date; } void rtc_init() { + RTC_InitTypeDef RTC_InitStruct; + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + PWR_BackupAccessCmd(ENABLE); + + RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); + RCC_RTCCLKCmd(ENABLE); + + RTC_InitStruct.RTC_HourFormat = RTC_HourFormat_24; + RTC_InitStruct.RTC_AsynchPrediv = 128; + RTC_InitStruct.RTC_SynchPrediv = 256; + + RTC_Init(&RTC_InitStruct); }