diff --git a/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.c b/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.c index a362d2379..cec090d0c 100644 --- a/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.c +++ b/os/hal/ports/STM32/LLD/RTCv2/rtc_lld.c @@ -50,6 +50,8 @@ #define RTC_DR_DT_OFFSET 4 #define RTC_DR_DU_OFFSET 0 +#define RTC_CR_BKP_OFFSET 18 + /*===========================================================================*/ /* Driver exported variables. */ /*===========================================================================*/ @@ -343,8 +345,9 @@ void rtc_lld_set_time(RTCDriver *rtcp, const RTCDateTime *timespec) { /* Writing the registers.*/ rtc_enter_init(); - rtcp->rtc->TR = tr; - rtcp->rtc->DR = dr; + rtcp->rtc->TR = tr; + rtcp->rtc->DR = dr; + rtcp->rtc->CR |= timespec->dstflag << RTC_CR_BKP_OFFSET; rtc_exit_init(); /* Leaving a reentrant critical zone.*/ @@ -361,7 +364,7 @@ void rtc_lld_set_time(RTCDriver *rtcp, const RTCDateTime *timespec) { * @notapi */ void rtc_lld_get_time(RTCDriver *rtcp, RTCDateTime *timespec) { - uint32_t dr, tr; + uint32_t dr, tr, cr; uint32_t subs; #if STM32_RTC_HAS_SUBSECONDS uint32_t ssr; @@ -380,6 +383,7 @@ void rtc_lld_get_time(RTCDriver *rtcp, RTCDateTime *timespec) { #endif /* STM32_RTC_HAS_SUBSECONDS */ tr = rtcp->rtc->TR; dr = rtcp->rtc->DR; + cr = rtcp->rtc->CR; rtcp->rtc->ISR &= ~RTC_ISR_RSF; /* Leaving a reentrant critical zone.*/ @@ -400,6 +404,9 @@ void rtc_lld_get_time(RTCDriver *rtcp, RTCDateTime *timespec) { /* Decoding date, this concludes the atomic read sequence.*/ rtc_decode_date(dr, timespec); + + /* Retrieving the DST bit.*/ + timespec->dstflag = (cr >> RTC_CR_BKP_OFFSET) & 1; } #if (RTC_ALARMS > 0) || defined(__DOXYGEN__) diff --git a/readme.txt b/readme.txt index 0f599ea0a..80b4e581a 100644 --- a/readme.txt +++ b/readme.txt @@ -73,6 +73,7 @@ ***************************************************************************** *** 16.1.6 *** +- HAL: Fixed STM32 RTCv2 driver does not handle the DST bit (bug #799). - HAL: Fixed MAC driver broken on STM32F107 (bug #798). - VAR: Fixed missing const qualifier in local shell commands array (bug #797). - VAR: Fixed compilation error in cmsis_os.h (bug #796).