@@ -534,9 +534,17 @@ void STM32RTC::setHours(uint8_t hours, RTC_AM_PM period)
534
534
void STM32RTC::setTime (uint8_t hours, uint8_t minutes, uint8_t seconds)
535
535
{
536
536
if (_configured) {
537
- setSeconds (seconds);
538
- setMinutes (minutes);
539
- setHours (hours);
537
+ syncTime ();
538
+ if (seconds < 60 ) {
539
+ _seconds = seconds;
540
+ }
541
+ if (minutes < 60 ) {
542
+ _minutes = minutes;
543
+ }
544
+ if (hours < 24 ) {
545
+ _hours = hours;
546
+ }
547
+ RTC_SetTime (_hours, _minutes, _seconds, _subSeconds, (_hoursPeriod == RTC_AM)? AM : PM);
540
548
}
541
549
}
542
550
@@ -551,10 +559,21 @@ void STM32RTC::setTime(uint8_t hours, uint8_t minutes, uint8_t seconds)
551
559
void STM32RTC::setTime (uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t subSeconds, RTC_AM_PM period)
552
560
{
553
561
if (_configured) {
554
- setSubSeconds (subSeconds);
555
- setSeconds (seconds);
556
- setMinutes (minutes);
557
- setHours (hours, period);
562
+ syncTime ();
563
+ if (subSeconds < 1000 ) {
564
+ _subSeconds = subSeconds;
565
+ }
566
+ if (seconds < 60 ) {
567
+ _seconds = seconds;
568
+ }
569
+ if (minutes < 60 ) {
570
+ _minutes = minutes;
571
+ }
572
+ if (hours < 24 ) {
573
+ _hours = hours;
574
+ }
575
+ _hoursPeriod = period;
576
+ RTC_SetTime (_hours, _minutes, _seconds, _subSeconds, (_hoursPeriod == RTC_AM)? AM : PM);
558
577
}
559
578
}
560
579
@@ -566,7 +585,7 @@ void STM32RTC::setTime(uint8_t hours, uint8_t minutes, uint8_t seconds, uint32_t
566
585
void STM32RTC::setWeekDay (uint8_t weekDay)
567
586
{
568
587
if (_configured) {
569
- RTC_GetDate (&_year, &_month, &_day, &_wday );
588
+ syncDate ( );
570
589
if ((weekDay >= 1 ) && (weekDay <= 7 )) {
571
590
_wday = weekDay;
572
591
}
@@ -582,7 +601,7 @@ void STM32RTC::setWeekDay(uint8_t weekDay)
582
601
void STM32RTC::setDay (uint8_t day)
583
602
{
584
603
if (_configured) {
585
- RTC_GetDate (&_year, &_month, &_day, &_wday );
604
+ syncDate ( );
586
605
if ((day >= 1 ) && (day <= 31 )) {
587
606
_day = day;
588
607
}
@@ -598,7 +617,7 @@ void STM32RTC::setDay(uint8_t day)
598
617
void STM32RTC::setMonth (uint8_t month)
599
618
{
600
619
if (_configured) {
601
- RTC_GetDate (&_year, &_month, &_day, &_wday );
620
+ syncDate ( );
602
621
if ((month >= 1 ) && (month <= 12 )) {
603
622
_month = month;
604
623
}
@@ -614,7 +633,7 @@ void STM32RTC::setMonth(uint8_t month)
614
633
void STM32RTC::setYear (uint8_t year)
615
634
{
616
635
if (_configured) {
617
- RTC_GetDate (&_year, &_month, &_day, &_wday );
636
+ syncDate ( );
618
637
if (year < 100 ) {
619
638
_year = year;
620
639
}
@@ -632,9 +651,17 @@ void STM32RTC::setYear(uint8_t year)
632
651
void STM32RTC::setDate (uint8_t day, uint8_t month, uint8_t year)
633
652
{
634
653
if (_configured) {
635
- setDay (day);
636
- setMonth (month);
637
- setYear (year);
654
+ syncDate ();
655
+ if ((day >= 1 ) && (day <= 31 )) {
656
+ _day = day;
657
+ }
658
+ if ((month >= 1 ) && (month <= 12 )) {
659
+ _month = month;
660
+ }
661
+ if (year < 100 ) {
662
+ _year = year;
663
+ }
664
+ RTC_SetDate (_year, _month, _day, _wday);
638
665
}
639
666
}
640
667
@@ -649,11 +676,20 @@ void STM32RTC::setDate(uint8_t day, uint8_t month, uint8_t year)
649
676
void STM32RTC::setDate (uint8_t weekDay, uint8_t day, uint8_t month, uint8_t year)
650
677
{
651
678
if (_configured) {
652
- setWeekDay (weekDay);
653
- setDay (day);
654
- setMonth (month);
655
- setYear (year);
656
- }
679
+ syncDate ();
680
+ if ((weekDay >= 1 ) && (weekDay <= 7 )) {
681
+ _wday = weekDay;
682
+ }
683
+ if ((day >= 1 ) && (day <= 31 )) {
684
+ _day = day;
685
+ }
686
+ if ((month >= 1 ) && (month <= 12 )) {
687
+ _month = month;
688
+ }
689
+ if (year < 100 ) {
690
+ _year = year;
691
+ }
692
+ RTC_SetDate (_year, _month, _day, _wday); }
657
693
}
658
694
659
695
/* *
0 commit comments