Всем привет!
Изучаю MCU STM32F103RCT6 в среде Keil uVision 4 c использованием Standard Peripherals Library.
При программировании столкнулся с проблемой делая следующее:
1 ) инициализация системы функцией SystemInit();
2 ) инициализация RTC (часов реального времени):
- тактирование RTC;
- установка предделителя RTC на 32768;
- включение внешнего кварца LSE с частотой 32768 Гц;
- разрешение прерывания по будильнику;
т.е. здесь имеем счет в RTC_CNT частотой 1 Гц
3 ) инициализация USART1;
4 ) чтение текущего времени с регистра RTC_CNT;
5 ) передача значения текущего времени по USART1;
6 ) установка времени будильника в регистр RTC_ALR = RTC_CNT + 5; (т.е. событие RTC_Alarm должно возникнуть через 5 сек);
7 ) чтение времени будильника с регистра RTC_ALR;
8 ) передача значения времени будильника по USART1;
по п.5 и 8 убеждаюсь, что время_будильника = текущее_время + 5
9 ) вызов режима STANDBY функцией PWR_EnterSTANDBYMode();
10 ) Сон..., Пробуждение по RTC_Alarm и переход к п.1
При этом возникла следующая ошибка:
текущее_время после пробуждения в п.5 отличается на +1 сек от времени_будильника, установленный до ухода в сон. Т.е. получается время_будильника = текущее_время + 6, а должно быть время_будильника = текущее_время + 5.
Кто знает, в чем может быть причина?
P.S. с данной ошибкой обратился в STMicroelectronics, но пока ответа нет.